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

如何按指定变量的每n个唯一值拆分dataframe并绘图

R语言按Lot分组批量绘图高效方案

核心思路

先对唯一的Lot值做分组标记,再基于组标记拆分/分面,完全不受单个Lot数据行数影响,支持任意N值调整,大数据集下性能稳定。

方案1:生成独立的分组绘图(可单独导出)

  1. 加载依赖包、设置每组Lot数量
library(tidyverse)
N <- 2 # 按需调整每组包含的Lot数量
  1. 给Lot分配组编号并关联回原数据集
# 为所有唯一Lot分配组号
lot_group_map <- tibble(Lot = unique(df$Lot)) %>%
  mutate(group_id = rep(1:ceiling(n()/N), each = N, length.out = n()))
# 关联组号到原数据
df_with_group <- df %>% left_join(lot_group_map, by = "Lot")
  1. 嵌套数据批量生成绘图对象
# 按组嵌套数据,每组生成一个ggplot对象存储在列表中
group_plots <- df_with_group %>%
  nest(data = -group_id) %>%
  mutate(
    plot = map2(data, group_id, ~ggplot(.x, aes(x = time, y = Value, color = factor(Lot))) +
                  geom_point() +
                  stat_smooth() +
                  labs(title = paste0("第", .y, "组Lot趋势图"), color = "Lot编号")
    )
  )

你可以直接调取任意组的绘图:
print(group_plots$plot[[1]])
也可以批量导出所有图到本地:

walk2(group_plots$plot, group_plots$group_id, ~ggsave(paste0("lot_group_", .y, ".png"), .x, width = 8, height = 5))

方案2:单画布分组分面展示(适合快速预览)

如果不需要单独导出每张图,只是快速查看所有组的趋势,可以直接用分面实现:

library(tidyverse)
N <- 2
lot_group_map <- tibble(Lot = unique(df$Lot)) %>%
  mutate(group_id = rep(1:ceiling(n()/N), each = N, length.out = n()))
df %>%
  left_join(lot_group_map, by = "Lot") %>%
  ggplot(aes(x = time, y = Value, color = factor(Lot))) +
  geom_point() +
  stat_smooth() +
  facet_wrap(~group_id) +
  labs(color = "Lot编号")

补充提示:你原有代码中的filter(Lot == c(123, 265))写法存在逻辑缺陷,筛选多个匹配值应该使用Lot %in% c(123, 265),避免因循环匹配出现错误的筛选结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:57:01