2016-05-16 54 views
1

我的问题是我认为应该直截了当,但我看不出如何解决它。当我做一个标准的饼图来查看R生成它们的顺序的颜色时,我得到一个颜色顺序,但是当我在ggplot中使用相同的彩虹时,我得到了不同的顺序。这里有一个重复的例子:ggplot2颜色顺序不匹配饼图顺序

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) 

这里的结果我得到:

Comparison of orders

任何帮助将不胜感激。

回答

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() 

?AsIsI)。

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

+0

谢谢,这工作。你知道为什么你必须指定它的原因吗?我唯一能想到的就是RColorBrewer以某种方式改变它。 – AodhanOL

+0

我不知道为什么订单在内部发生了变化,但'aes(color = myRainbow [1:7])'不会将'#000000'解释为_black_,而是作为字符值。 'aes(color = I(myRainbow [1:7]))'认为它是黑色的。或者,为了防止订单被改变,您可以将一个已命名的字符向量传递给scale_的'values'参数。这样,您还可以确保字符值#000000被映射到颜色#000000。 – lukeA