如何在同一条形图中绘制三个变量的CFS评分占比?
绘制多变量并列CFS评分占比条形图解决方案
要实现三个变量的并列占比条形图,核心是先把宽格式数据转换为ggplot更易处理的长格式,再通过position="dodge"实现并列效果。以下是具体步骤:
1. 数据格式转换
假设你的三个目标变量为cfs_triage、triage_a、triage_b(替换为实际列名),用tidyr包将宽数据转为长格式:
# 加载依赖包 library(ggplot2) library(tidyr) # 转换为长格式 df_long <- df %>% pivot_longer( cols = c(cfs_triage, triage_a, triage_b), # 指定需要合并的三个变量列 names_to = "变量名称", values_to = "CFS评分" )
2. 绘制并列占比条形图
根据需求选择以下两种占比计算方式:
方式一:各变量内的分类占比(单变量下总和为100%)
ggplot(df_long, aes(x = 变量名称, y = ..prop.., fill = CFS评分, group = 变量名称)) + geom_bar(position = "dodge", stat = "count") + scale_y_continuous(labels = scales::percent_format()) + # 显示百分比 labs(x = "", y = "占比", fill = "CFS评分") + theme_minimal()
方式二:整体数据中的占比(所有条形总和为100%)
保持和你单变量绘图时一致的整体占比逻辑:
ggplot(df_long, aes(x = 变量名称, y = ..count../sum(..count..), fill = CFS评分)) + geom_bar(position = "dodge", stat = "count") + scale_y_continuous(labels = scales::percent_format()) + labs(x = "", y = "整体占比", fill = "CFS评分") + theme_minimal()
关键说明
position="dodge":强制条形并列展示,而非默认的堆叠效果。- 长格式转换:让ggplot能统一识别分组变量,是多变量并列绘图的前提。
scales::percent_format():将小数转为百分比,提升图表可读性。
内容的提问来源于stack exchange,提问作者esptang
相关产品推荐
相关产品推荐

