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

如何使用R语言ggplot包绘制spaghetti plot(面条图)

R语言绘制纵向数据面条图(Spaghetti Plot)实现方案

你可以用ggplot2包快速实现按患者分组的轨迹连线图,步骤如下:

  • 数据预处理
    你提供的示例数据中value列为字符型,需要先转为数值类型,同时固定时间点的排序避免绘图时坐标轴顺序错乱:
# 加载绘图依赖包
library(ggplot2)

# 构建示例数据
data <- data.frame(
  Study_ID = c("100","100","100","200","200","200","300","300","300"),
  time_point = c("Time1","Time2","Time3","Time1","Time2","Time3","Time1","Time2","Time3"),
  value = c("15","50","120","20","35","150","35","67","95")
)

# 类型转换
data$value <- as.numeric(data$value)
data$Study_ID <- as.factor(data$Study_ID)
# 固定时间点水平顺序
data$time_point <- factor(data$time_point, levels = c("Time1", "Time2", "Time3"))
  • 基础版面条图绘制
    核心是将Study_ID映射到group美学参数,即可为每个患者生成独立的轨迹线,同时可通过颜色区分不同患者:
ggplot(data, aes(x = time_point, y = value, group = Study_ID, color = Study_ID)) +
  geom_line(linewidth = 1) + # 绘制个体轨迹线
  geom_point(size = 2) + # 可选:在每个观测点添加标记点
  labs(
    x = "观测时间点",
    y = "测量值",
    color = "患者ID"
  ) +
  theme_bw() # 使用简洁白底主题
  • 进阶优化(匹配常见科研绘图样式)
    如果需要在个体轨迹基础上突出总体变化趋势,可以叠加总体均值线,同时将个体轨迹调淡避免视觉杂乱:
ggplot(data, aes(x = time_point, y = value, group = Study_ID, color = Study_ID)) +
  geom_line(linewidth = 0.8, alpha = 0.7) +
  geom_point(size = 2, alpha = 0.7) +
  # 叠加总体均值趋势线,用黑色加粗虚线突出
  stat_summary(aes(group = 1), fun = mean, geom = "line",
               color = "black", linewidth = 1.5, linetype = "dashed") +
  labs(
    x = "观测时间点",
    y = "测量值",
    color = "患者ID"
  ) +
  theme_classic()

提示:如果你的时间点是连续数值(比如随访天数、治疗周数),无需将时间点转为因子,直接映射到x轴即可自动按连续尺度排布连线。

内容的提问来源于stack exchange,提问作者sabc04

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:01:40