如何在每个ggplot的构面内对堆栈进行排序?

问题描述 投票:2回答:1

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

类似但不完全相同的查询How to control ordering of stacked bar chart using identity on ggplot2Order Stacked Bar Graph in ggplotreorder each facet ascending for a ggplot stacked bar graph

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

ets

r ggplot2 bar-chart stacked-chart
1个回答
1
投票

默认情况下,条形根据grp按字母顺序排列。要按per进行订购,我们可以通过使用例如grp中的fct_reorder。但是请注意,从多个方面来看,这种简单的解决方案不适用于更一般的情况。

forcats

“”

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()) (v0.3.0)在2020-03-17创建

© www.soinside.com 2019 - 2024. All rights reserved.