r - 使用 ggplot2 排序多面堆叠条形图

标签 r ggplot2 bar-chart facet

我有一个如下所示的数据集,我正在尝试获取一个有序的多面堆叠条形图。我已经查看了一些关于 SO 的答案,特别是 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 的顺序> 值(value)观

enter image description here

任何有关如何解决此问题的建议将不胜感激

最佳答案

在使用聚合函数 sum 时,使用 reorder 似乎不遵守 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

关于r - 使用 ggplot2 排序多面堆叠条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57845331/

相关文章:

javascript - dc.js 条形图中的目标

r - 在 R 中控制 Leaflet 热图的 Z 索引

r - 如何在 select 中的 dplyr 函数中传递列参数?

r - 在 ggplot2 输出中组合希腊语和表达式

r - 使用 R 中的 ggplot2 绘制具有平均段的分类散点图

python - 将值添加到子图的条形中

python - 条形图中的索引和排序问题

r - GRanges 的 as.data.table 方法是否应该默认通过引用修改原始对象?

r - 跨多行的字符串延续,没有换行符

r - 向ggplot箱图添加简单的lm趋势线