ggplot 手动设置scale_color_gradientn

问题描述 投票:0回答:3

我有一个这样的数据框

BP        R2      LOG10
96162057 0.2118000 2.66514431
96162096 0.0124700 0.31749391
96162281 0.0008941 0.07012148
96163560 0.5011000 2.48505399
96163638 0.8702000 3.37778598

我想根据 LOG10 绘制 BP,并用 R2 为点着色。 R2是0-1之间的连续值。

myplot <- read.cvs("mytable.csv",head=TRUE)
attach(myplot)
ggplot(myplot,aes(BP,LOG10, color=R2)) + geom_point() 

到目前为止,一切都很好。不过,我想以手动选择的间隔和颜色显示 R2 颜色,如下所示(如果我有离散值)。

ggplot(myplot,aes(BP,LOG10, color=R2)) + geom_point() + 
      scale_color_manual(breaks= c("1","0.8","0.6","0.4","0.2","0"), 
                values = c("red","yellow","green","lightblue","darkblue"))
Error: Continuous value supplied to discrete scale

这看起来很漂亮,但我宁愿自己设置颜色。

ggplot(myplot,aes(BP,LOG10, color=R2)) + geom_point(shape=1) + 
               scale_colour_gradientn(colours = rainbow(10))

那么,如何从连续值(1-0.8、0.8-0.6、0.6-0.4、0.4-0.2、0.2-0)中手动选择间隔,并根据自己的喜好对它们进行着色(红色、黄色、绿色、浅色、深蓝色) )?颜色之间的平滑渐变会很酷,但并不重要。

r colors ggplot2 gradient
3个回答
25
投票

您可以使用

scale_colour_gradientn()
,然后提供您自己的
colours=
values=
。值将给出每种颜色的间隔。

ggplot(myplot,aes(BP,LOG10, color = R2)) + geom_point() + 
  scale_colour_gradientn(colours = c("red","yellow","green","lightblue","darkblue"),
                         values = c(1.0,0.8,0.6,0.4,0.2,0)) 

gradientn chart example


23
投票

4 年后对这篇文章的评论:重要的是要注意“值”将变量值映射在 0 和 1 之间,0 是最低值,1 是最高值。在此示例中,它恰好适合 0 到 1 的变量值。


0
投票

添加另一条注释以回应 tjebo 的答案(https://stackoverflow.com/a/44736761/4052900)。

最重要的是,如果我们想要正确映射超出变量实际值的值,则必须使用

limits

例如我希望渐变映射到 -0.4 和 0.4,但变量的最小值和最大值是 -0.365 和 0.2,所以我必须使用

limits = c(-0.4, 0.4)
scale_colour_gradientn
知道我希望这些值用于 0 和1 在
values
中指定。总的来说,我发现这非常令人困惑,并且与
scale_color_manual
scale_color_gradient2
的工作方式高度不一致。

PS。我花了一些时间才发现这一点,所以我将其添加为单独的答案,而不是对 tjebo 答案的评论,以便其他遇到相同问题的人可以更轻松地找到它。

© www.soinside.com 2019 - 2024. All rights reserved.