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

基于长格式数据绘制多线图:按起始值排序批量分组绘图需求

解决方案

假设你的数据是长格式(包含PatID、Time、Value三列),且已经按Time=0时的Value升序完成了PatID的排序(向量c是排序后的PatID列表),可以用以下两种方式实现批量绘制多线图:

方法1:分面批量展示所有分组

先给数据添加分组标识,将100个PatID按每10个一组划分,再用ggplot分面绘制:

library(tidyverse)

# 假设原始数据框名为df,按排序后的PatID筛选并添加分组
df_sorted <- df %>%
  filter(PatID %in% c) %>%  # 匹配排序后的PatID列表
  mutate(PatID = factor(PatID, levels = c),  # 固定PatID顺序,保证起始值从低到高
         group = cut_number(row_number(), n = 10))  # 每10个个体分为一组

# 绘制分面多线图
ggplot(df_sorted, aes(x = Time, y = Value, color = PatID, group = PatID)) +
  geom_line() +
  facet_wrap(~group, ncol = 2) +  # 按分组分面,可调整列数
  theme_bw() +
  theme(legend.position = "bottom")  # 将图例放在底部避免遮挡

方法2:循环生成独立单张图片

如果需要每张图单独保存,可通过循环分批提取数据并绘制:

# 把排序后的PatID拆分为每10个一组
pat_groups <- split(c, ceiling(seq_along(c)/10))

# 循环遍历每个分组,绘制并保存图片
for(i in seq_along(pat_groups)){
  current_pats <- pat_groups[[i]]
  plot_data <- df %>% filter(PatID %in% current_pats)
  
  p <- ggplot(plot_data, aes(x = Time, y = Value, color = PatID, group = PatID)) +
    geom_line(linewidth = 1) +
    labs(title = paste("Group", i, " - PatIDs:", paste(current_pats, collapse = ", "))) +
    theme_bw()
  
  # 保存图片,可自定义格式和路径
  ggsave(paste0("line_plot_group_", i, ".png"), p, width = 10, height = 6)
}

关键说明

  • 无需用pull单条提取,直接通过filter筛选一组PatID,ggplot会自动按group=PatID绘制每条线
  • factor(PatID, levels = c)用于固定PatID的顺序,确保图中线的排列和你按Time=0排序的结果一致
  • 两种方法均可满足“每张图含10条线、起始值从低到高排列”的需求,可根据是否需要分面或独立图片选择

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:10:30