【问题标题】:ggplot set scale_color_gradientn manuallyggplot 手动设置 scale_color_gradientn
【发布时间】:2013-08-31 11:53:10
【问题描述】:

我有一个这样的数据框

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


    【解决方案1】:

    您可以使用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)) 
    

    【讨论】:

    • 非常感谢 Didzis,这完全解决了它!您是否也有没有渐变的解决方案,而是 1-0.8 = 红色、0.8-0.6 = 黄色等所有值?
    • 然后您应该使用 cut() 函数将数据划分为区间,并将这些区间用作离散值。
    • 如何使这个渐变跨越 6 个不同的值,但只能从蓝色到红色?我只想提供“低”和“高”颜色,并相应地混合中间级别。我说的是这个的离散版本:scale_color_gradient(low="blue", high="red")。我只能让它与自定义函数一起使用,但必须有更简单的方法:color.gradient.discrete = function(color.low, color.high, n) { scales::seq_gradient_pal(low=color.low, high=color.high)(seq(0, 1, length.out = n)) }
    • 预期结果说明here
    【解决方案2】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 2013-08-16
    • 2023-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多