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

如何用ggplot为交叉研究受试者生成带ID的单独叠加处理图

为每个受试者生成单独的浓度曲线叠加图

方法概述

要实现每个受试者单独的图形并叠加T、R两种处理的结果,可通过两种方式实现:

  • 分面图:一次性生成所有受试者的图形面板,便于整体对比
  • 单独文件:为每个受试者生成独立的图形文件,适合单独查看或报告使用

代码实现

方式1:生成分面图(所有受试者在同一画布)

这种方式无需循环,利用ggplot2的分面功能快速生成所有受试者的图形:

library(ggplot2)

# 绘制分面图,每个分面对应一个受试者
subject_facet_plot <- ggplot(Totalplot, aes(x = time, y = conc, color = drug)) +
  # 添加数据点
  geom_point(alpha = 0.5, shape = 2) +
  # 添加曲线,忽略NA值避免曲线中断
  geom_line(linewidth = 0.5, na.rm = TRUE) +
  # 设置坐标轴标签
  xlab('时间 (h)') +
  ylab('血浆药物X浓度 (ng/ml)') +
  # 设置标题和图例名称
  labs(title = '各受试者血浆药物浓度曲线', color = '处理组') +
  # 按受试者ID分面,可调整列数(ncol)
  facet_wrap(~subj, ncol = 2) +
  # 使用简洁的主题,并增强受试者ID的显示效果
  theme_bw() +
  theme(strip.text = element_text(size = 12, face = 'bold'))

# 显示图形
print(subject_facet_plot)

方式2:生成单独的图形文件(每个受试者一个文件)

如果需要为每个受试者保存独立的图形文件,可结合dplyr和purrr实现循环生成:

library(ggplot2)
library(dplyr)
library(purrr)

# 获取所有唯一的受试者ID
subject_ids <- unique(Totalplot$subj)

# 循环处理每个受试者
walk(subject_ids, function(id) {
  # 筛选当前受试者的数据
  subj_data <- filter(Totalplot, subj == id)
  
  # 绘制当前受试者的图形
  subj_plot <- ggplot(subj_data, aes(x = time, y = conc, color = drug)) +
    geom_point(alpha = 0.5, shape = 2) +
    geom_line(linewidth = 0.5, na.rm = TRUE) +
    xlab('时间 (h)') +
    ylab('血浆药物X浓度 (ng/ml)') +
    # 标题中包含受试者ID
    labs(title = paste('受试者', id, '血浆药物浓度曲线'), color = '处理组') +
    theme_bw()
  
  # 保存图形,文件名包含受试者ID
  ggsave(filename = paste0('subject_', id, '_concentration_plot.png'),
         plot = subj_plot, width = 6, height = 4, dpi = 300)
})

关键说明

  • 无需对数据进行分组汇总:直接使用原始数据即可保留每个受试者的个体数据
  • 处理NA值:在geom_line中添加na.rm = TRUE,避免因缺失值导致曲线中断
  • 自定义样式:可根据需求调整图形的大小、颜色、主题等参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:38:14