我需要使用两个单独的 geom_area 命令生成一个图,以便在零线上方绘制一些时间序列,在零线下方绘制一些时间序列。这是一个简单的例子:
library("reshape2")
library("ggplot2")
d <- as.data.frame(t(read.table(sep=";",header=F,row.names=1,text="
year;1999;2000;2001;2002;2003;2004;2005;2006;2007;2008;2009;2010;2011;2012
primary balance;-5.63;-11.88;-15.37;-18.3;-20.09;-21.45;-21.87;-23.25;-26.98;-29.56;-28.92;-28.46;-29.64;-32.61
snow-ball effect;1.61;0.81;2.67;4.99;7.23;8.02;9.45;9.6;11.01;14.06;22.81;24.41;25.76;26.89
adjustment;2.83;5.38;6.52;3.93;2.28;2.45;3.94;5.28;4.5;6.73;6.94;7.59;7.73;8.07")))
dd <- melt(d,id.vars="year")
dd1 <- subset(dd,variable=="primary balance")
dd2 <- subset(dd,variable!="primary balance")
ggplot()+
geom_area(data=dd1,aes(x=year,y=value,fill=variable,order=variable),alpha=.5)+
geom_area(data=dd2,aes(x=year,y=value,fill=variable,order=variable),alpha=.5)
Run Code Online (Sandbox Code Playgroud)
虽然变量级别的顺序是:(1)“主要平衡”,(2)“雪球效应”和(3)“调整”,但现在我可以告诉 ggplot 分配颜色并将项目放入图例以正确的顺序排列。
您可以使用以下命令更改订单scale_fill_manual(values=..., breaks=...):
ggplot() +
geom_area(data=dd1,
aes(x=year, y=value, fill=variable, order=variable),
alpha=.5) +
geom_area(data=dd2,
aes(x=year, y=value, fill=variable, order=variable),
alpha=.5) +
scale_fill_manual(values=scales::hue_pal()(3),
breaks=c("adjustment",
"snow-ball effect",
"primary balance"))
Run Code Online (Sandbox Code Playgroud)