色带颜色反转

时间:2015-03-05 02:45:58

标签: r ggplot2

用丝带绘制图表时遇到问题。我在这里的一个帖子中遇到了一个示例脚本。这有同样的问题。

以下是线程中的脚本(稍加修改)

x=1:10
y1=1:10
y2=2:11
y3=10:1
y4=9:0

dt=data.frame(x,y1,y2,y3,y4)

library(ggplot2)  

g<-ggplot(dt)+
  geom_ribbon(aes(x=x,ymin=y1,ymax=y2,fill='red'),
              alpha=0.4)

g<-g + geom_ribbon(aes(x=x,ymin=y3,ymax=y4,fill='blue'),
              alpha=0.5)

g<-g +  scale_fill_manual(name='legendname',
                    values=c('red','blue'),
                    labels=c('one','two'))

该脚本绘制两条名为&#34;一条&#34;和&#34;两个&#34;。 Ribbon&#34; one&#34; (上升)应该是红色的&#34;两个&#34; (下来)应该是蓝色的。但颜色是相反的。

如果脚本逐步执行,您将看到第一个带子被绘制成红色,当绘制带子2时,它会改变颜色。

我对R.全新。请向我解释这里发生了什么?

1 个答案:

答案 0 :(得分:1)

根据ggplot2 documentation(第10页),当您在美学中设置参数fill时,您基本上会创建一个颜色标度(可以是连续的也可以是离散的,具体取决于关于论点)。我不确定aes函数的内部实现,但是我怀疑,因为你传递了一个颜色字符串,而不是可能值的向量,所以填充参数被忽略了

事实上,如果您在应用g功能之前查看scale_fill_manual,您会看到ggplot2将其默认颜色分配给色带,而不是您选择的颜色:< / p>

enter image description here

最后颜色反转的原因是因为当你应用scale_fill_manual时,红色会变成顶部的图层,蓝色会变成它下面的图层。

要获得正确的颜色,您可以执行的操作是将fill参数分配给geom_ribbon而不是aes,如下所示:

g <- ggplot(dt)
g <- g + geom_ribbon(aes(x=x, ymin=y1, ymax=y2), fill = 'red', alpha=0.4)
g <- g + geom_ribbon(aes(x=x, ymin=y3, ymax=y4), fill = 'blue', alpha=0.5)

此外,对于此特定示例,您不需要最后的色标。