首页 > 解决方案 > 如何在每个 ggplot 的方面对堆栈进行排序?

问题描述

请帮助我们按升序对堆栈进行排序!即左侧似乎是有序的,但右侧并没有真正排序,因为 1.7 应该出现在右端。(请参考截图)

类似但不准确的查询 如何使用 ggplot2 上的标识来控制堆叠条形图的排序 在 ggplot 中对堆叠条形图进行 排序 重新排列每个方面的升序以获取 ggplot 堆叠条形图

df = data.frame(cat = c(rep("A",9),rep("B",11)),
                grp = c(rep("C",3),rep("D",3),rep("F",3), rep("C",3),rep("D",3),rep("E",2),rep("F",3)),
                yrs = c(rep(c("2017","2018","2019"),5),"2017","2019","2017","2018","2019"),
                per = c(2.4,2.5,3.2,
                15.3,17,16.7,
                82.4,80.5,80.1,
                8.6,9.6,15.2,
                36.2,42.2,40.4,
                1.7,1.1,53.4,
                48.2,43.4))

df %>% 
  ggplot(aes(x = "scale",y = per, fill = grp)) +
  # geom_bar(stat="identity") +
  geom_col() +
  geom_text(aes(label= round(per,1)), 
            position=position_stack(vjust=0.5), size= 3) +
  facet_grid(vars(yrs),vars(cat)) +
  coord_flip() +
  theme_bw() +
  xlab("") +
  ylab("") +
  ggtitle("How to sort ") +
  theme(legend.position="bottom",
        legend.title = element_blank(),
        plot.title = element_text(hjust = 0.5),
        axis.text = element_blank(),
        axis.ticks = element_blank())

等

标签: rggplot2bar-chartstacked-chart

解决方案


默认情况下,条形图按照字母顺序排列grp。要订购,我们可以通过使用例如fromper重新订购来为您的情况实现这一点。但是请注意,对于 facets,这个简单的解决方案不适用于更一般的情况。grpfct_reorderforcats

library(ggplot2)
library(dplyr)
library(forcats)

df <- data.frame(cat = c(rep("A",9),rep("B",11)),
               grp = c(rep("C",3),rep("D",3),rep("F",3), rep("C",3),rep("D",3),rep("E",2),rep("F",3)),
               yrs = c(rep(c("2017","2018","2019"),5),"2017","2019","2017","2018","2019"),
               per = c(2.4,2.5,3.2,
                       15.3,17,16.7,
                       82.4,80.5,80.1,
                       8.6,9.6,15.2,
                       36.2,42.2,40.4,
                       1.7,1.1,53.4,
                       48.2,43.4))

df %>% 
  ggplot(aes(x = "scale", y = per, fill = fct_reorder(grp, per))) +
  # geom_bar(stat="identity") +
  geom_col() +
  geom_text(aes(label= round(per,1)), 
            position=position_stack(vjust=0.5), size= 3) +
  facet_grid(vars(yrs),vars(cat)) +
  coord_flip() +
  theme_bw() +
  xlab("") +
  ylab("") +
  ggtitle("How to sort ") +
  theme(legend.position="bottom",
        legend.title = element_blank(),
        plot.title = element_text(hjust = 0.5),
        axis.text = element_blank(),
        axis.ticks = element_blank())

reprex 包于 2020-03-17 创建(v0.3.0)


推荐阅读