ggplot2游泳者图:按患者在治状态实现颜色编码并添加图例
用ggplot2绘制带治疗状态颜色编码的游泳者图
嘿,我来帮你搞定这个游泳者图的颜色编码和图例问题!核心思路就是把「是否仍在治疗」这个变量映射到条形的填充色(或边框/线条色),再通过手动颜色标度来定制颜色和图例内容,具体步骤如下:
核心实现逻辑
你需要在ggplot()的aes()函数里,把fill(填充色)或者color(边框/线条色)绑定到你的治疗状态变量(比如假设你的数据框TonT1里有个叫StillOnTreatment的列,值是TRUE/FALSE或者字符型的状态描述),ggplot会自动根据这个分组生成图例,再配合scale_fill_manual()或scale_color_manual()来定制颜色和图例文字。
示例代码(基于条形型游泳者图)
首先加载ggplot2包:
library(ggplot2)
假设你的TonT1包含PatientID(患者ID)、TreatmentDuration(治疗时长)、StillOnTreatment(是否仍在治疗,逻辑型)这几列,代码如下:
ggplot(TonT1, aes(x = PatientID, y = TreatmentDuration, fill = StillOnTreatment)) + # 绘制条形,width调整条形宽度 geom_col(width = 0.8) + # 自定义填充色和图例 scale_fill_manual( values = c("TRUE" = "#2ecc71", "FALSE" = "#e74c3c"), # 自定义颜色,绿色=在治疗,红色=已终止 labels = c("仍在接受治疗", "已终止治疗"), # 图例显示的文字 name = "治疗状态" # 图例标题 ) + # 翻转坐标轴,变成横向游泳者图(更符合阅读习惯) coord_flip() + # 自定义坐标轴标签 labs(x = "患者ID", y = "治疗时长") + # 可选:用简洁的主题 theme_minimal()
如果是线段型游泳者图(另一种常见样式)
如果你的游泳者图是用线段表示治疗时长,那就把fill换成color,用geom_segment()绘制:
ggplot(TonT1, aes( x = PatientID, xend = PatientID, y = 0, yend = TreatmentDuration, color = StillOnTreatment )) + # 调整线段粗细,让它更显眼 geom_segment(size = 4) + # 自定义线条颜色和图例 scale_color_manual( values = c("TRUE" = "#3498db", "FALSE" = "#f39c12"), labels = c("仍在接受治疗", "已终止治疗"), name = "治疗状态" ) + coord_flip() + labs(x = "患者ID", y = "治疗时长") + theme_minimal()
注意事项
- 如果你的治疗状态是字符型(比如"On Treatment"/"Discontinued"),只需要把
scale_fill_manual()里的values键改成对应字符就行,比如:scale_fill_manual(values = c("On Treatment" = "#27ae60", "Discontinued" = "#c0392b")) - 图例会自动生成,如果你想调整图例的位置,可以加
theme(legend.position = "top")这类参数来修改。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

