我试图使用ggplot2创建堆积条形图,标签显示变量的累积总和。但是条形图以错误的顺序堆叠,因此标签与条形图不匹配。
gcookbook 包中的数据集 cabbage_exp 。
该过程如下所示。
我首先使用 安排 按品种首先订购数据,然后按日期订购数据。然后我使用 ddply 创建新列 label_y 以反映重量的累积总和,按品种
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")
我不确定我哪里出错了。任何帮助将不胜感激。
非常感谢。
答案 0 :(得分:0)
您的标签与该类别不对应的原因是您基于y截距绘制标签,而不是基于类别对应。因此,最高y截距值始终位于顶部。
所以你只需要将标签作为ggplot的一部分来调用(aes ...调用说“对于每个类别,将相应的文本放在其上”。
#try this
ggplot(data = ce, aes(x = Cultivar, y = Weight, fill = Date, label = label_y)) +
geom_bar(stat = "identity") +
geom_text(size = 3, position = position_stack(vjust = 0.5)) #play with position to control where the text is placed.
(同样,鼓励你练习良好的代码缩进以提高可读性)