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

R语言mschart包堆叠条形图自定义评级顺序与排序问题

R语言mschart堆叠条形图排序调整方案

调整逻辑

  • 评级分类排序:将Rating列转为有序因子,手动指定levels为你需要的Excellent>Very Good>Good>Fair>Poor顺序,mschart会默认按照因子level顺序渲染堆叠分段的顺序
  • 条形上下排序:提取每个Variable_name对应的Excellent类别的数值,将Variable_name转为有序因子,按对应Excellent数值降序设置levels,即可实现条形从上到下按Excellent数值从高到低排列

修改后完整代码

library(tidyverse)
library(readxl)
library(stringr)
library(magrittr)
library(dplyr)
library(officer)
library(mschart)

# testing mschart barcharts in Word--------------------------------------------
R_POPS_testdataset_forstackedbars <- read_csv("R-POPS testdataset forstackedbars.csv")

# 新增:两处排序调整-------------------------
# 1. 设置评级的优先级顺序
R_POPS_testdataset_forstackedbars$Rating <- factor(
  R_POPS_testdataset_forstackedbars$Rating,
  levels = c("Excellent", "Very Good", "Good", "Fair", "Poor")
)
# 2. 按Excellent数值排序条形顺序
var_sort_order <- R_POPS_testdataset_forstackedbars %>%
  filter(Rating == "Excellent") %>%
  arrange(desc(Rating_prop)) %>%
  pull(Variable_name)
R_POPS_testdataset_forstackedbars$Variable_name <- factor(
  R_POPS_testdataset_forstackedbars$Variable_name,
  levels = var_sort_order
)
# 排序调整结束-------------------------------

RPOPS_ESUtheme <- mschart_theme(axis_text_x = fp_text(color="#808080", font.family = "Franklin Gothic Medium Cond (Body)", font.size = 9), 
                                grid_major_line = fp_border(width=0), grid_minor_line = fp_border(width=0),
                                main_title = fp_text(color="#808080", font.family = "Franklin Gothic Medium Cond (Body)", font.size = 11),
                                legend_text = fp_text(color="#808080", font.family = "Franklin Gothic Medium Cond (Body)", font.size = 9),
                                legend_position = "t")
chart_02 <- ms_barchart(data = as.data.frame(R_POPS_testdataset_forstackedbars), x = "Variable_name", y = "Rating_prop", group = "Rating")
fp_text_settings <- list(
  "Excellent" = fp_text(font.size = 8, color = "white", font.family = "Franklin Gothic Medium Cond (Body)"),
  "Good" = fp_text(font.size = 8, color = "white", font.family = "Franklin Gothic Medium Cond (Body)"),
  "Very Good" = fp_text(font.size = 8, color = "white", font.family = "Franklin Gothic Medium Cond (Body)"),
  "Poor" = fp_text(font.size = 8, color = "white", font.family = "Franklin Gothic Medium Cond (Body)"),
  "Fair" = fp_text(font.size = 8, color = "white", font.family = "Franklin Gothic Medium Cond (Body)")
)
chart_02 <- as_bar_stack(chart_02, percent=TRUE, gap_width = 30, dir="horizontal")
chart_02 <- chart_data_labels(chart_02, show_val = TRUE, num_fmt="0%")
chart_02 <- chart_labels_text(chart_02, values = fp_text_settings)
chart_02 <- chart_data_fill(chart_02, values = c("Excellent" = "#275E6B", "Very Good" = "#4AAAC4", "Good" = "#8CD4E5", "Fair" = "#F7963D", "Poor" = "#BE2327"))
chart_02 <- chart_labels(chart_02, title="Program Organization: Overall Effectiveness", xlab="",ylab="")
chart_02 <- chart_ax_y(chart_02, display=FALSE)
chart_02 <- chart_ax_x(chart_02, major_tick_mark = "none", minor_tick_mark = "none")
chart_02 <- set_theme(chart_02, RPOPS_ESUtheme)

doc02 <- read_docx(path = "R-POPS Evaluation_Program Report Template.docx")
doc02 <- body_add_chart(doc02, chart=chart_02, height=2.75, width=6.5)
doc03 <- print(doc02, target = "R-POPS Evaluation_Program Report Template.docx")

内容的提问来源于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.27 06:15:06