【问题标题】:Unable to change order in a stacked bar graph [duplicate]无法更改堆叠条形图中的顺序 [重复]
【发布时间】: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 &lt;- arrange(cabbage_exp, Cultivar, desc(Date)) 修改日期 的顺序找到了解决方案。这样,条形图至少对应于累积和标签。但是,通过这样做,在 d16d20d21 中,d16 的累积和最大,即不太合乎逻辑。
  • 使Date 成为具有所需顺序的水平因子。
  • 如果您希望堆栈顺序是从下到上而不是从上到下,请参阅geom_bar 中的position = position_stack(reverse = TRUE)
  • 谢谢@aosmith。它工作得很好!非常感谢。

标签: r ggplot2 bar-chart


【解决方案1】:

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

(另外,会鼓励您练习良好的代码缩进以提高可读性)

【讨论】:

  • 感谢@griffmer 的建议。它有点工作,但因为标签代表累积和,如果从底部堆栈到顶部堆栈,累积和增加会更好。 aosmith 提供的建议效果很好:)
猜你喜欢
  • 2018-02-15
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
相关资源
最近更新 更多