为什么我的图例在我的geom_line应该使用红色时使用紫色?

时间:2018-12-31 22:51:16

标签: r ggplot2

下面的代码生成一个线状图的堆积面积图,就像我想要的那样,但是它生成的图例与线状图的颜色不匹配。我该如何解决?谢谢!

legend on the graph

ggplot(data=revenue, aes(x=Date, alpha=0.1)) +
  geom_area(aes(y=SENSE.revenues + ORB.revenues + SENSE.refills + ORB.refills, 
                fill=" ORB Refills"),colour="Black")+
  geom_area(aes(y=SENSE.revenues + ORB.revenues + SENSE.refills, fill=" ORB 
                Revenue"),colour="Black")+
  geom_area(aes(y=SENSE.revenues + SENSE.refills, fill=" SENSE 
                Refills"),colour="Black")+
  geom_area(aes(y=SENSE.revenues, fill=" SENSE Revenues"),colour="Black") +
                labs(title="Projected Revenues", subtitle="SENSE and ORB", 
                     y="Revenue ($Thousand)") +          
  scale_fill_discrete(name="Revenue Type") +
  theme(axis.text.x = element_text(angle = 75, hjust = 1))+
  scale_x_discrete(name ="Date", limits=dates) +                   
  scale_fill_brewer(palette="Purples")+
  scale_alpha(guide = 'none')+
  theme(legend.title=element_blank())+
  geom_line(aes(y=Returns, fill=" Revenues Net of Returns"), colour="Red", 
                size=0.7)

1 个答案:

答案 0 :(得分:6)

当您想在ggplot图中绘制多个事物时,从长远来看,几乎总是最好的方式是重新排列数据,这样您就可以一次绘制所有图像,并以美观的方式区分它们,而不是要求多个几乎完全相同的geom_ ...这是一个粗糙的示例。

整理一些数据:

set.seed(101)
dd <- data.frame(Date=1:4,
                 SENSE.revenues=rpois(4,3),
                 ORB.revenues=rpois(4,3),
                 SENSE.refills=rpois(4,3),
                 ORB.refills=rpois(4,3),
                 Returns=rpois(4,3))

从宽到长转换:

ddg <- tidyr::gather(dd[,1:5],"type","revenue",-Date)

(使用dd[,1:5]可以避免退货;如果您想使用tidyverse,可以在此处使用select(-Returns)

使用单个geom_area()进行绘图,用fill进行区分:使用position="stack"可以将所有面积绘制为一个在另一个上方...单独绘制红线,用伪造的色彩美学(我们会覆盖颜色值并用scale_colour_manual()标签)。

ggplot(data=ddg,
       aes(x=Date,y=revenue))+
    geom_area(position="stack",aes(fill=type))+
    scale_fill_brewer(palette="Purples", name="revenue type")+
    geom_line(data=dd,aes(y=Returns,colour="junk"))+
    scale_colour_manual(values="red",
                        labels="Returns",
                        name="")

enter image description here