使用ggplot2绘制分面堆积条形图的顺序问题

3
我有一个数据集,想要制作一个有序的分面堆叠条形图。我查看了一些stackoverflow上的答案,特别是this,以此来制作我的图表,但是我不确定为什么这在我的堆叠条形图的一个特定柱子上无法工作。
structure(list(reg = c("J", "J", "J", "J", "J", "J", "J", "J", 
"KA", "KA", "KA", "KA", "KA", "KA", "KA", "KA", "KA", "KA", "RI", 
"RI", "RI", "RI", "SU", "SU", "SU", "SU", "SU", "SU", "SA", "SA", 
"SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", 
"SA", "SA", "SA"), org = structure(c(1L, 1L, 3L, 3L, 4L, 4L, 
2L, 2L, 1L, 1L, 3L, 3L, 4L, 4L, 2L, 2L, 8L, 8L, 2L, 2L, 1L, 1L, 
1L, 1L, 2L, 2L, 5L, 5L, 1L, 1L, 3L, 3L, 4L, 4L, 2L, 2L, 6L, 6L, 
5L, 8L, 7L, 7L, 9L, 9L), .Label = c("WR", "MS", "SM", "AA", "AAL", 
"PH", "P3", "SD", "HS"), class = "factor"), level = structure(c(2L, 
1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 
1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 
1L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 1L), .Label = c("E", 
"R"), class = "factor"), share = c(6.94, 1.51, 3.01, 0.42, 1.58, 
0.24, 2.85, 0.19, 4.7, 0.5, 2.16, 5.32, 1.08, 1.26, 0.82, 1.11, 
1.8, 1.73, 2, 3.52, 5, 2, 1.29, 0.38, 0.72, 0.46, 0.44, 2.27, 
15.79, 13.74, 5.12, 16.21, 6.54, 11.16, 8.19, 10.91, 4.71, 5.32, 
0.45, 0.14, 1.03, 0.33, 5.04, 3.03), reg_l = c("J_R", "J_E", 
"J_R", "J_E", "J_R", "J_E", "J_R", "J_E", "KA_R", "KA_E", "KA_R", 
"KA_E", "KA_R", "KA_E", "KA_R", "KA_E", "KA_R", "KA_E", "RI_R", 
"RI_E", "RI_R", "RI_E", "SU_R", "SU_E", "SU_R", "SU_E", "SU_R", 
"SU_E", "SA_R", "SA_E", "SA_R", "SA_E", "SA_R", "SA_E", "SA_R", 
"SA_E", "SA_R", "SA_E", "SA_E", "SA_E", "SA_R", "SA_E", "SA_R", 
"SA_E")), row.names = c(NA, -44L), class = c("tbl_df", "tbl", 
"data.frame"))

这是我的当前代码

data$level <- as.factor(as.character(data$level))
data$reg_l <- with(data, paste(reg,level,sep = "_"))

data$org <- factor(data$org,levels=c("WR","MS","SM","AA","AAL","PH","P3","SD","HS"))

# plot
reg_plot <- ggplot(data, aes(x = reorder(reg_l,share),y = share,group=org)) +
  coord_flip()+
  facet_wrap(level~.,ncol = 1,scales="free") +
  geom_bar(stat="identity",aes(fill=org),colour=NA,width=0.75) +
  scale_x_discrete(breaks = data$reg_l, labels = data$reg) +
  xlab("\n") + 
  ylab("\n") +
  scale_y_continuous(limits = c(0,100)) +
  ggtitle("\n")

reg_plot

下面的图表是我现在得到的,但某些原因 RI 条形图似乎没有按照从 highlow 值的顺序排列。

enter image description here

任何关于如何解决这个问题的建议将不胜感激
1个回答

2

使用reorder函数在使用聚合函数sum时似乎无法尊重facet_wrap。对我而言,使用forcats::fct_reorder()解决了这个问题:

reg_plot <- ggplot(data, aes(x = forcats::fct_reorder(reg_l, share, .fun = sum),y = share,group=org)) +
  coord_flip()+
  facet_wrap(level~.,ncol = 1,scales="free") +
  geom_bar(stat="identity",aes(fill=org),colour=NA,width=0.75) +
  scale_x_discrete(breaks = data$reg_l, labels = data$reg) +
  xlab("\n") + 
  ylab("\n") +
  scale_y_continuous(limits = c(0,100)) +
  ggtitle("\n")

reg_plot

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接