Using multiple scale_colour_gradient scales for di

2019-07-28 23:30发布

我非常新的与R所以请原谅,如果事情是不是清楚我的问题。

我有一个data.frame “蛋白质”与5列,分别是;

1.protein_name,2.protein_FC,3.protein_pval,4.mRNA_FC,5.mRNA_pval和6.freq。

我试图绘制以x = LOG 2(protein_FC)火山的情节,Y = -log10(protein_pval)。 然后映射点的大小,频率和颜色mRNA_FC。 这一切工作正常,在这里是我使用的代码:

ggplot( protein [ which ( protein$freq <= 0.05 ),] , aes( x = log2( protein_FC ) ,
       y = -log10 ( protein_pval ) , size = freq , colour = mRNA_FC , 
       label = paste(protein_name,",",mRNA_pval), alpha=1/1000)) + 
  geom_point() + geom_text( hjust = 0 , vjust = 0 , colour = "black" , size = 2.5 ) + 
  geom_abline( intercept = 1.3 , slope = 0) + 
  scale_colour_gradient(limits=c(-3,3))

一切都很好,直到在这里。 但由于实验的性质,数据是围绕相当密集mRNA_FC = 0 。 在那里,那ggplot默认的配色方案适用不工作的非常好区分不同点。

我以尝试了各种色标low="colour1"high="colour2" 。 不过,我认为这将是最好的了的范围内使用多个色阶mRNA_FC ,即像。 蓝色到白色为-3<mRNA<-0.2 ,红色到白色为-0.2<mRNA_FC<0绿白色为0<mRNA_FC<0.2和黑到白为0.2<mRNA_FC<3

但是我还没有发现这样做还没有任何办法。

任何帮助,将不胜感激。 干杯!

Answer 1:

对于这种类型的事情,你要使用scale_gradientn 。 例如:

library(ggplot2)

x = seq(-0.1, 0.1, len=100)
y = 0:10
dat = expand.grid(x=x, y=y)

ggplot(data=dat, aes(x=x, y=y, fill=x)) +
  geom_raster() +
  scale_fill_gradientn(colours=c('red', 'yellow', 'cyan', 'blue'),
    values   = c(-0.05,-1e-32,1e-32,0.05),
    breaks   = c(-0.05,-0.005,0.005,0.05),
    rescaler = function(x,...) x,
    oob      = identity)



文章来源: Using multiple scale_colour_gradient scales for different ranges of the data in one plot
标签: r ggplot2