首页 文章

无法更改堆积条形图中的顺序[重复]

提问于
浏览
1

这个问题在这里已有答案:

我试图使用ggplot2创建一个堆积条形图,标签显示变量的累积总和 . 但是条形图以错误的顺序堆叠,因此标签与条形图不匹配 .

数据集是 gcookbook 包中的 cabbage_exp .

该过程如下所示 .

我首先使用 arrange 先按品种排序数据,然后按日期排序 . 然后我使用 ddply 创建一个新列 label_y 以反映 Weight 的累计和,按 Cultivar 分组 .

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

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")

我不知道我哪里出错了 . 任何帮助将不胜感激 .

非常感谢 .

1 回答

  • 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.
    

    what you want

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

相关问题