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
相关产品推荐
相关产品推荐

