分别为正值和负值设置颜色和alpha

时间:2017-04-19 09:00:13

标签: r ggplot2

我正在尝试使用以下数据中的log2值绘制点的散点图:

   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

我正在尝试使用log2值进行着色,其中:

  • 高正值是深蓝色和实心
  • 较低的正值为浅蓝色且更透明
  • 范围-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")

但结果不对(我得到以下错误):

  

'color'的比例已经存在。添加另一个比例   'color',它将取代现有的规模。

enter image description here

2 个答案:

答案 0 :(得分:1)

根据SELECT * FROM some_table t WHERE NOT EXISTS ( SELECT 1 FROM some_table x WHERE LEAST( x.start_date, x.end_date ) < GREATEST( t.start_date, t.end_date ) AND GREATEST( x.start_date, x.end_date ) > LEAST( t.start_date, t.end_date ) ) 的帮助文件:

&#34;如果颜色不能沿着渐变均匀定位,则此向量给出颜色向量中每种颜色的位置(在0和1之间)。请参阅rescale以获得一个convience函数,以将任意范围映射到0到1之间。&#34;

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

scale_colour_gradientn()

然后记下要为其着色的log2值的等效log2_scale值。然后使用您选择的log2_scale值替换values参数中的向量(这些值应介于0和1之间)。

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

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

要自动计算值向量,可以创建一个使用clean_file data.frame的自定义函数,并将原始log2值映射到缩放值。

答案 1 :(得分: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