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

如何使用R绘制按受试者ID分组的二值状态随访视变化折线图

解决方案

核心问题修正说明

此前SAS生成图形出现访视轴排序错乱的根本原因是:未将访视变量指定为按时间顺序排列的有序分类变量,程序默认按观测值在数据中出现的先后顺序排列轴标签,才会出现00、02、03、01的错误顺序。绘图前先固定访视变量的水平顺序,即可彻底解决该问题。

适配数据的可视化选项

1. 个体轨迹折线图(适合小样本量,清晰展示单受试者转归)

你最初设想的「X轴映射访视、Y轴映射疾病状态、每个受试者单独绘制轨迹」的思路完全适配这类纵向二值随访数据,搭配点标注每次访视的实际状态,可读性很强。
R实现代码(基于ggplot2):

# 加载绘图包
library(ggplot2)

# 读入示例数据
ID<-c(001, 001, 001, 001, 002, 002, 002, 002, 003, 003, 004, 004, 004, 005, 005, 005, 005, 006, 007, 007, 008, 008, 008, 009, 009, 009, 009, 010, 011, 011)
Visit<-c(00, 01, 02, 03, 00, 01, 02, 03, 01, 02, 00, 02, 03, 00, 01, 02, 03, 02, 00, 01, 00, 02, 03, 00, 01, 02, 03, 00, 01, 03)
Status<- c(0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1)
data<-data.frame(ID,Visit, Status)

# 数据预处理:从根源解决排序问题
data$ID <- factor(sprintf("%03d", data$ID)) # 格式化ID为3位字符,避免ID排序错误
data$Visit <- factor(sprintf("%02d", data$Visit), levels = c("00","01","02","03")) # 固定访视水平顺序,彻底解决轴错乱
data$Status <- factor(data$Status, levels = c(0,1), labels = c("未患病","患病"))

# 绘制分面个体轨迹图
ggplot(data, aes(x = Visit, y = Status, group = 1)) +
  geom_line(linewidth = 1) +
  geom_point(size = 2) +
  facet_wrap(~ID, ncol = 4) + # 按ID分面,可自行调整列数
  scale_y_discrete(breaks = c("未患病","患病")) +
  labs(x = "访视编号", y = "疾病状态", title = "各受试者访视期间疾病状态变化") +
  theme_bw()

注意:代码中group=1是因为每个分面内只有一个受试者的轨迹,必须指定分组才能正确绘制折线。缺失访视的位置会自动留空,不会打乱轴顺序。

2. 状态热图(适合大样本量,快速浏览整体转归规律)

如果后续纳入受试者数量较多,分面折线图会出现分面过多、浏览效率低的问题,可改用热图形式:行对应受试者、列对应访视、单元格颜色映射疾病状态,能同时展示上百个受试者的转归轨迹,不会出现重叠杂乱问题。
实现代码:

ggplot(data, aes(x = Visit, y = ID, fill = Status)) +
  geom_tile(color = "white", linewidth = 0.5) +
  scale_fill_manual(values = c("未患病" = "#91bfdb", "患病" = "#fc8d59")) +
  labs(x = "访视编号", y = "受试者ID", fill = "疾病状态", title = "各受试者访视期间疾病状态热图") +
  theme_bw()

如果需要在热图上叠加转归连线,也可以搭配geom_line()实现,兼顾整体分布和个体轨迹的展示。

内容的提问来源于stack exchange,提问作者R. Simian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:42:29