如何在R中绘制多数据集组合直方图并实现对比可视化
解决方案
数据预处理
首先修正数据类型(原count是字符型,需转为数值型才能正确绘图排序),并给两个数据集添加分组标识,方便ggplot区分:
# 创建并处理数据集1 data1 <- data.frame( count = as.numeric(c('10', '15', '16','16','29')), drug = c('ibuprofen','aleve','tylenol','claritin', 'ozempic'), group = "数据集1" ) # 创建并处理数据集2 data2 <- data.frame( count = as.numeric(c('150', '1000', '15','1','234','452','692')), drug = c('ibuprofen','aleve','tylenol','xanax','gilenya','humira','tums'), group = "数据集2" ) # 合并两个数据集 combined_data <- rbind(data1, data2)
绘制并排对比条形图
使用geom_col(适合已知数值的分类条形图,而非统计频数的直方图),配合position_dodge实现并排效果,添加数值标签并设置指定颜色:
library(ggplot2) ggplot(combined_data, aes(x = reorder(drug, -count), y = count, fill = group)) + # 绘制并排条形,控制间距避免重叠 geom_col(position = position_dodge(width = 0.8), width = 0.7) + # 在条形上方添加count数值标签 geom_text(aes(label = count), position = position_dodge(width = 0.8), vjust = -0.5, size = 3.5) + # 手动设置颜色:数据集1为黑色,数据集2为灰色 scale_fill_manual(values = c("数据集1" = "black", "数据集2" = "gray50")) + # 设置坐标轴和标题 labs(x = "药物", y = "Count数值", title = "两个数据集药物Count对比") + # 优化主题样式,x轴标签倾斜避免重叠 theme_minimal() + theme( plot.title = element_text(hjust = 0.5, size = 14, face = "bold"), axis.text.x = element_text(angle = 45, hjust = 1) )
关键细节说明
- 转
count为数值型:原字符型数据无法正确排序和计算位置,必须转换 reorder(drug, -count):让药物按count降序排列,对比更直观position_dodge参数:控制并排条形的间距,确保两个数据集的条形不重叠geom_text的vjust=-0.5:将数值标签放在条形顶部,避免遮挡条形内容
内容的提问来源于stack exchange,提问作者Nashe
相关产品推荐
相关产品推荐

