【发布时间】:2017-09-17 20:40:16
【问题描述】:
我试图使用 ggplot2 创建一个堆积条形图,其标签显示变量的累积总和。但是条形图以错误的顺序堆叠,因此标签与条形图不匹配。
数据集是gcookbook包中的cabbage_exp。
流程如下图。
我首先使用 arrange 先按 Cultivar 排序数据,然后按 Date 排序。然后我用 ddply 创建了一个新列 label_y 来反映 Weight 的累积总和,按 分组>品种。
ce <- arrange(cabbage_exp, Cultivar, Date)
ce <- ddply(ce, "Cultivar", transform, label_y = cumsum(Weight))
经过以上两步,数据是这样的。
Cultivar Date Weight sd n se label_y
1 c39 d16 3.18 0.9566144 10 0.30250803 3.18
2 c39 d20 2.80 0.2788867 10 0.08819171 5.98
3 c39 d21 2.74 0.9834181 10 0.31098410 8.72
4 c52 d16 2.26 0.4452215 10 0.14079141 2.26
5 c52 d20 3.11 0.7908505 10 0.25008887 5.37
6 c52 d21 1.47 0.2110819 10 0.06674995 6.84
然后我使用以下代码创建了条形图。
ggplot(data=ce, aes(x=Cultivar, y=Weight, fill=Date)) +
geom_bar(stat="identity") + geom_text(aes(y=label_y, label=label_y),
vjust=1.5, colour="white")
图表如下所示。 d16、d20 和 d21 的条形顺序不正确。
然后我尝试更改日期顺序并使用以下代码重新生成图表。但图表没有改变。
ggplot(data=ce, aes(x=Cultivar, y=Weight, fill=Date, order=desc(Date))) +
geom_bar(stat="identity") + geom_text(aes(y=label_y, label=label_y),
vjust=1.5, colour="white")
我不确定我哪里出错了。任何帮助将不胜感激。
非常感谢。
【问题讨论】:
-
我设法通过使用
ce <- arrange(cabbage_exp, Cultivar, desc(Date))修改日期 的顺序找到了解决方案。这样,条形图至少对应于累积和标签。但是,通过这样做,在 d16、d20 和 d21 中,d16 的累积和最大,即不太合乎逻辑。 -
使
Date成为具有所需顺序的水平因子。 -
如果您希望堆栈顺序是从下到上而不是从上到下,请参阅
geom_bar中的position = position_stack(reverse = TRUE)。 -
谢谢@aosmith。它工作得很好!非常感谢。