You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:41:59