R/ggplot2条形图绘制失败求助:多类别副作用数据可视化
解决ggplot2绘制横向分组条形图的问题
嘿,我来帮你搞定这个条形图的问题!你目前的代码只是初始化了ggplot的基础框架,还缺了几个关键步骤——首先得把宽格式数据转换成ggplot更适配的长格式,然后添加几何对象来生成条形,最后设置你想要的颜色映射。
第一步:把宽数据转成长格式
你的数据现在是宽格式(每个作者对应三列副作用数据),而ggplot需要长格式(每一行对应一个作者+一种副作用类型+对应人数)。我们可以用tidyr包的pivot_longer函数来转换:
# 先加载需要的包 library(ggplot2) library(tidyr) # 转换数据格式 d_long <- pivot_longer( data = d, cols = c(nAE, AE, SAE), # 要转换的列 names_to = "side_effect", # 新的分类列名称 values_to = "patient_count" # 新的数值列名称 )
转换后的数据结构会变成这样(前几行示例):
# A tibble: 18 × 3 author side_effect patient_count <fct> <chr> <int> 1 Bahr et al nAE 22 2 Bahr et al AE 3 3 Bahr et al SAE 0 4 Fuller et al nAE 34 ...
第二步:绘制横向条形图
现在用转换后的长数据来画图,我们可以选择堆叠条形图(把三个副作用数值叠在一起)或者并列条形图(三个条形并排),两种方式都给你参考:
方式1:堆叠横向条形图
ggplot(data = d_long, aes(x = patient_count, y = author, fill = side_effect)) + geom_col(position = "stack") + # 堆叠模式 # 手动设置你要的颜色:nAE红、AE绿、SAE蓝 scale_fill_manual(values = c("nAE" = "red", "AE" = "green", "SAE" = "blue")) + # 添加标题和轴标签 labs( title = "药物A副作用研究统计", x = "患者人数", y = "研究作者", fill = "副作用类型" ) + theme_minimal() # 用简洁的主题美化
方式2:并列横向条形图
如果你想让三个副作用的条形并排展示,只需要把position = "stack"改成position = "dodge":
ggplot(data = d_long, aes(x = patient_count, y = author, fill = side_effect)) + geom_col(position = "dodge") + # 并列模式 scale_fill_manual(values = c("nAE" = "red", "AE" = "green", "SAE" = "blue")) + labs( title = "药物A副作用研究统计", x = "患者人数", y = "研究作者", fill = "副作用类型" ) + theme_minimal()
为什么你的初始代码没成功?
你原来的代码ggplot(data=d, aes(x=nAE, y=author, fill=AE))有两个核心问题:
- 只映射了
nAE和AE两个变量,完全没包含SAE,没法同时展示三个数值; fill映射的是数值型的AE列,而不是分类的副作用类型,ggplot没法正确识别颜色分组。
这样调整后就能得到你想要的效果啦!
内容的提问来源于stack exchange,提问作者cmirian
相关产品推荐
相关产品推荐

