如何对ggplot生成的堆叠条形图按Excellent评分最高值降序排序
解决方法
你当前的图表默认按Variable_name的字符顺序排列,要实现「Excellent占比最高的条目排在最前」的效果,核心是要提前对Variable_name的因子水平按Excellent评分的占比自定义排序,修改后完整代码如下:
library(tidyverse) # 读取测试数据集 R_POPS_testdataset_forstackedbars <- read_csv("R-POPS testdataset forstackedbars.csv") # 数据集预处理:按Excellent占比设置Variable_name的因子排序 R_POPS_testdataset_forstackedbars <- R_POPS_testdataset_forstackedbars %>% group_by(Variable_name) %>% # 提取每个评价条目对应的Excellent评分占比作为排序依据 mutate(excellent_sort_val = Rating_prop[Rating == "Excellent"]) %>% ungroup() %>% # 按Excellent占比降序重设因子水平,占比越高排序越靠前 mutate(Variable_name = fct_reorder(Variable_name, excellent_sort_val, .desc = TRUE)) # 绘图逻辑保持原有配置不变 RPOPS_ggchart01 <- ggplot(R_POPS_testdataset_forstackedbars, aes(x = Variable_name, y = Rating_prop, fill = factor(Rating, levels=c("Poor","Fair","Good","Very Good","Excellent")))) + geom_bar(stat="identity", position ="fill", width=0.8) + coord_flip() + scale_fill_manual("legend", values = c("Excellent" = "#275E6B", "Very Good" = "#4AAAC4", "Good" = "#8CD4E5", "Fair" = "#F7963D", "Poor" = "#BE2327")) + geom_text(aes(label=paste0(sprintf("%1.f", Rating_prop*100),"%")), position=position_fill(vjust=0.5), color="white", size=9) # 输出图表 RPOPS_ggchart01
关键修改说明
- 对数据集按
Variable_name分组后,提取每个分组下Excellent评分对应的占比作为排序依据 - 使用
fct_reorder函数重设Variable_name的因子水平,设置.desc = TRUE实现占比越高排序越靠前,配合coord_flip()最终图表从上到下就是Excellent占比从高到低的顺序
内容的提问来源于stack exchange,提问作者Mal Vane
相关产品推荐
相关产品推荐

