2017-04-21 81 views
1

我正在尝试使用ggplot2创建堆积条形图,标签显示变量的累计和。但酒吧堆放的顺序错误,所以标签与酒吧不匹配。无法更改堆积条形图中的订单

该数据集是cabbage_exp来自gcookbook包。

该过程如下所示。

我第一次使用排列先订单数据由品种第一,然后按日期。然后我用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 

然后我使用下面的代码创建了barplot。

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的条形码顺序不正确。

enter image description here

我然后试图改变日期的顺序,并使用下面的代码再生的曲线图。但该图并未改变。

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

我设法通过使用'ce < - arrange(cabbage_exp,Cultivar,desc(Date))修改** Date **的顺序来找到解决方案。 )'。这样,条形图至少与累积和标签相对应通过这样做,在* d16 *,* d20 *和* d21 *之间,* d16 *具有最大的累计和,这是不合逻辑的。 –

+0

使'日期'成为所需顺序的级别。 – alistaire

+0

如果您希望堆栈顺序从下到上而不是从上到下,请参阅'geom_bar'中的'position = position_stack(reverse = TRUE)'。 – aosmith

回答

0

您的标签与类别不对应的原因是您正在根据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. 

what you want

(也会鼓励你练习良好的代码缩进以提高可读性)

+0

感谢@griffmer的建议。它有点作用,但因为标签表示累积和,所以从底部堆栈到顶部堆栈会更好,累积总和会增加。由aosmith提供的建议完美地工作:) –