使用ggplot2如何反转堆积面积图的堆叠顺序

3

输入图像描述我想使用ggplot2绘制堆积面积图,但我发现我的结果与书中(R Graphics Cookbook Figure 4-22)的不同。

library(gcookbook)

library(plyr)

ggplot(uspopage, aes(x=Year, y=Thousands, fill=AgeGroup, order=desc(AgeGroup))) + geom_area(colour="black", size=.2, alpha=.4) + scale_fill_brewer(palette="Blues")

堆叠顺序无法反转(在书中,“>64”应该在底部)。这个过程中有什么问题吗?


1
我不知道你使用的 ggplot2 版本,但在 2.1.0 版本中官方已弃用 "order" 美学属性。它从未真正起作用,并且文档记录不好。详情请参考:https://github.com/hadley/ggplot2/releases - bVa
1
重新排序实际数据框uspopage。如果您想要重新排序图例,可以反转级别顺序。 - joran
2
也就是说,uspopage$AgeGroup = factor(uspopage$AgeGroup, levels = rev(levels(uspopage$AgeGroup))) - Gregor Thomas
2
Factors是实现这一点的方法:http://rstudio-pubs-static.s3.amazonaws.com/7433_4537ea5073dc4162950abb715f513469.html - Chris
1
@Chris:重新排序因子级别只会影响图例;如果你想改变堆叠顺序,你必须在将数据帧交给ggplot之前重新排列/重新排序整个数据帧。这并不是很直观...... - lukeA
1个回答

2

一种临时的方法是重新排列数据。不是

AgeGroup 
      <5     
    5-14    
   15-24

you want

AgeGroup 
>64     
55-64  
45-54

你可以将最后一个元素放在第一位,倒数第二个元素放在第二位,以此类推。这与使用 c("A", "B", "C", "D")[4:1] 类似。

swap <- uspopage[nrow(uspopage):1,] 
ggplot(swap, aes(x=Year, y=Thousands, fill=AgeGroup, order=desc(AgeGroup))) + 
geom_area(colour="black", size=.2, alpha=.4) + scale_fill_brewer(palette="Blues")

2016年6月2日:在评论请求后,我进行了一些解释。


它运行良好。但是你可以给一些解释吗? - Feng Tian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接