gpt4 book ai didi

r - 在一个图中对不同范围的数据使用多个 scale_colour_gradient 比例

转载 作者:行者123 更新时间:2023-12-04 17:25:49 29 4
gpt4 key购买 nike

我对 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) 绘制火山图。然后将点的大小映射到 freq,将颜色映射到 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 .

但我还没有找到任何方法来做到这一点。

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

最佳答案

对于这种类型的东西,你想使用 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)

enter image description here

关于r - 在一个图中对不同范围的数据使用多个 scale_colour_gradient 比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10142180/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com