重新排序具有两级 ggplot2 的堆积条形图

时间:2021-02-16 04:17:57

标签: r ggplot2

我有这个数据:

# A tibble: 6 x 3
  question category percent
  <chr>    <chr>      <dbl>
1 No       A           0.82
2 No       C           0.8 
3 No       B           0.77
4 Yes      B           0.23
5 Yes      C           0.2 
6 Yes      A           0.18

然后我制作了一个堆积条形图:

data %>% 
  ggplot(aes(x = category, y = percent, fill = question)) + 
  geom_col(position = "fill") + 
  coord_flip()

但我真正想要的是在“是”中排列降序。这意味着类别“B”应该在顶部,“C”在中间”,“A”在底部。

如果我没有堆积图,我可以用 reorder() 来完成。但是我如何使用堆积图来做到这一点?

数据:

structure(list(question = c("No", "No", "No", "Yes", "Yes", "Yes"
), category = c("A", "C", "B", "B", "C", "A"), percent = c(0.82, 
0.8, 0.77, 0.23, 0.2, 0.18)), row.names = c(NA, -6L), class = c("tbl_df", 
"tbl", "data.frame"))

enter image description here

2 个答案:

答案 0 :(得分:2)

arrange 数据,设置因子和绘图。

library(dplyr)
library(ggplot2)

data %>% 
  arrange(desc(question), percent) %>%
  mutate(category = factor(category, unique(category))) %>%
  ggplot(aes(x = category, y = percent, fill = question)) + 
  geom_col(position = "fill") + 
  coord_flip()

enter image description here

答案 1 :(得分:0)

您可以通过输入有序因子来手动重新排序类别变量。

dat$category <- factor(dat$category, levels = c('B', 'C', 'A'), ordered = T)