【问题标题】:ggplot2 colour order don't match pie chart orderggplot2 颜色顺序与饼图顺序不匹配
【发布时间】:2016-05-16 11:07:34
【问题描述】:

我的问题是一个我认为应该直截了当但我不知道如何解决的问题。当我做一个标准饼图来查看 R 生成颜色的顺序时,我得到一个颜色顺序,但是当我在 ggplot 中使用相同的彩虹时,我得到一个不同的顺序。这是一个可重现的示例:

require(ggplot2)
myRainbow <- rainbow(7)
pie(rep(1, 7), labels=letters[1:7], col = myRainbow)
x11()
ggplot( data.frame(x = 1:7, y = 9:3), aes(x = x, y = y, colour = myRainbow[1:7],size = 4,show.legend=FALSE) ) + 
    geom_point() + scale_colour_manual(values=myRainbow, name="Colour_Test", labels=letters[1:7], breaks=myRainbow) +
    guides(size=FALSE)

这是我得到的结果:

任何帮助将不胜感激。

【问题讨论】:

    标签: r ggplot2 colors


    【解决方案1】:

    如果您“按原样”指定它们,您将获得相同的颜色顺序:

    plot(y~x, data.frame(x = 1:7, y = 9:3), col = myRainbow[1:7], pch=19, cex=3)
    ggplot( data.frame(x = 1:7, y = 9:3), aes(x = x, y = y, colour = I(myRainbow[1:7]), size = 4,show.legend=FALSE) ) + 
        geom_point() 
    

    请参阅?AsIs (I)。

    或者,您可以使用scale_colour_manual(values=setNames(myRainbow, myRainbow)) 将正确的值映射到正确的级别。

    【讨论】:

    • 谢谢,这行得通。你知道你必须这样指定它的原因吗?我唯一能想到的就是 RColorBrewer 以某种方式改变它。
    • 我不知道为什么内部会改变顺序,但是aes(colour = myRainbow[1:7])不会将#000000解释为黑色,而是作为字符值。 aes(colour = I(myRainbow[1:7])) 认为它是黑色的。或者,为了防止更改顺序,您可以将命名字符向量传递给 scale_ 的 values 参数。这样,您还可以确保字符值 #000000 映射到颜色 #000000
    猜你喜欢
    • 1970-01-01
    • 2021-12-08
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    相关资源
    最近更新 更多