2017-04-19 43 views
0

我试图绘制与他们的log 2值以下数据彩色点的散点图:设置颜色和阿尔法分别对正值和负值

chromosome start end test ref position  log2  p.value cnv cnv.size cnv.log2 cnv.p.value 
1   X  1 10000 50 74  5000 -0.29260198 2.857792e-06 0  NA  NA   NA 
2   X 5001 15000 50 72 10000 -0.25307362 4.125984e-05 0  NA  NA   NA 
10   X 45001 55000 992 1043 50000 0.20066806 7.482412e-04 0  NA  NA   NA 
11   X 50001 60000 1287 1417 55000 0.13416749 1.687005e-02 0  NA  NA   NA 
12   X 55001 65000 892 1149 60000 -0.09226799 7.342756e-02 0  NA  NA   NA 
13   X 60001 70000 651 838 65000 -0.09129751 7.556642e-02 0  NA  NA   NA 

我用的log 2值试图颜色其中:

  • 海格正值为深蓝色和固体
  • 较低的正值在范围-0.75浅蓝色和更透明
  • 值:0.75是白色
  • 下负值浅红色和更透明的
  • 更高负值暗红色和固体

我已经尝试通过绘制POS和NEG分别值来实现这一点:

pos<-subset(clean_file, clean_file$log2 > 0) 
neg<-subset(clean_file, clean_file$log2 < 0) 

p <- ggplot() 
p <- p + geom_point(data=pos, aes(x = start, y = log2, alpha = log2, colour = log2)) 
p <- p + scale_colour_gradient2(low=muted("blue"), high=muted("green"), limits=c(0, 0.75), na.value="black") 
p <- p + geom_point(data=neg, aes(x = start, y = log2, alpha = -log2, colour = -log2)) 
p <- p + scale_colour_gradient2(low=muted("purple"), high=muted("red"), limits=c(0, -0.75), na.value="darkred") 
p <- p + ylim(-5,5) 
p <- p + facet_wrap(~chromosome, scale="free_x") 

但结果是不正确的(我碰到下面的错误):

量表“颜色'已经存在。为 “颜色”添加另一个比例,它将替换现有的比例。

enter image description here

回答

1

这基本达到了我想要的:

library(RColorBrewer) 

cols <- brewer.pal(n = 5, name = "RdBu") 

p <- ggplot() 
p <- p + geom_point(data=clean_file, aes(x = start, y = log2, colour = log2), size = 1) 
p <- p + ylim(-5,5) 
p <- p + scale_colour_gradientn(colours = cols, 
    values = rescale(c(-2, -0.25, 0, 0.25, 2)), 
    guide = "colorbar", limits=c(-5, 5))  
p <- p + facet_wrap(~chromosome, scale="free_x") 

enter image description here

1

每帮助文件为scale_colour_gradientn()

“如果颜色不应该被均匀地沿着梯度位于该矢量给出的位置(0和1之间)在颜色的每种颜色矢量。请参阅rescale函数以将任意范围映射到0和1之间。

所以你需要做一些调整。一种方法是创建一个额外的变量,重新缩放的log 2:

clean_file$log2_scale <- scales::rescale(clean_file$log2) 

然后记录相当于log2_scale值是什么,你要作为着色的log 2值。然后将值参数中的向量替换为您选择的log2_scale值(这些值应介于0和1之间)。

最后,你需要将映射添加到您的ggplot美学:

p <- ggplot() 
p <- p + geom_point(data=clean_file, aes(x = start, y = log2, colour = log2)) 
p <- p + ylim(-5,5) 
p <- p + scale_colour_gradientn(
    colours = c("red", "yellow", "white", "lightblue", "darkblue"), 
    values = scales::rescale(c(0.9, 0.8, 0.5, 0.2, 0.1)) 

要自动值向量的计算,你可以创建一个使用clean_file data.frame并绘制一个自定义函数原始log2值与缩放值进行比较。