下面的代码生成一个线状图的堆积面积图,就像我想要的那样,但是它生成的图例与线状图的颜色不匹配。我该如何解决?谢谢!
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)
答案 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="")