我对R很新,所以如果我的问题不清楚,请耐心等待.
我有一个data.frame有5列的"蛋白质",即;
1.protein_name,2.protein_FC,3.protein_pval,4.mRNA_FC,5.mRNA_pval和6.freq.
我试图绘制一个火山图,其中x = log2(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))
Run Code Online (Sandbox Code Playgroud)
一切都很好,直到这里.但由于实验的性质,数据非常密集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.
但我还没有找到任何办法.
任何帮助,将不胜感激.干杯!
Joh*_*lby 10
对于你想要使用的这种类型的东西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)
Run Code Online (Sandbox Code Playgroud)
