使用geom_bar将患者与临床医师配对分数合并至同一柱状图
解决方案
要实现你想要的分组柱状图,我们可以通过数据格式转换+频次统计+ggplot绘图来完成,完全契合你提到的dplyr和pivot_longer思路,具体步骤如下:
1. 加载必备工具包
先安装并加载需要的R包:
# 首次运行需安装包 install.packages(c("dplyr", "tidyr", "ggplot2")) # 加载包 library(dplyr) library(tidyr) library(ggplot2)
2. 数据整理与频次统计
把原数据的宽格式转成长格式,同时统计每个评分下患者自评、医师评定的次数:
# 转换格式并统计频次 df_long <- df %>% pivot_longer( cols = c(Patient, Clinican), # 指定要转换的两列 names_to = "评定者", # 新列:标记是患者还是医师 values_to = "评分" # 新列:存储1-8的分数 ) %>% group_by(评定者, 评分) %>% summarise(人数 = n(), .groups = "drop") # 统计每组的频次,关闭分组
3. 绘制分组柱状图
用ggplot生成对比柱状图,还原你想要的效果:
ggplot(df_long, aes(x = factor(评分), y = 人数, fill = 评定者)) + geom_bar(stat = "identity", position = position_dodge(0.8), width = 0.7) + # 分组并排柱状 scale_fill_manual(values = c("Patient" = "#4285F4", "Clinican" = "#EA4335")) + # 自定义颜色 labs( x = "评分(1=病情控制良好,8=晚期病危)", y = "人数", title = "患者自评 vs 医师评定评分分布", fill = "评定类型" ) + theme_minimal() + theme(plot.title = element_text(hjust = 0.5)) # 标题居中
运行以上代码后,就能得到和目标图结构一致的分组柱状图,清晰对比不同评分下患者与医师的评定频次。
内容的提问来源于stack exchange,提问作者docalexh
相关产品推荐
相关产品推荐

