You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:54:02