使用 ggplot2 排序多面堆叠条形图
Ordering of faceted stacked barplot with ggplot2
我有一个如下所示的数据集,我正在尝试获取有序的多面堆叠条形图。我已经查看了一些关于 SO 的答案,特别是 一个想出我的情节的答案,但我不确定为什么这不适用于我的堆叠条形图
的一个特定条形图
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
条似乎不遵循 high
到 low
值
的顺序
如有任何关于如何解决此问题的建议,我们将不胜感激
在使用聚合函数 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
我有一个如下所示的数据集,我正在尝试获取有序的多面堆叠条形图。我已经查看了一些关于 SO 的答案,特别是
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
条似乎不遵循 high
到 low
值
如有任何关于如何解决此问题的建议,我们将不胜感激
在使用聚合函数 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