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

如何多次运行R带随机抽样的函数并将所有结果绘制在同一张ggplot图中

实现思路

  1. 把你现有单次采样统计的逻辑封装成独立函数,每次运行都基于原始完整数据集,输出对应单次运行的频率统计结果,同时新增run_id字段标记当前是第几次重复
  2. 循环调用该函数5次,合并所有次的统计结果
  3. 绘图时通过group参数区分同分类下的不同重复运行结果,即可实现每个分类展示5条趋势线

完整可运行代码

# 加载依赖包
library(tidyverse)

# 封装单次运行逻辑的函数
# 参数说明:raw_dat为你的初始完整数据集,run_id为当前重复次数的编号
single_run <- function(raw_dat, run_id) {
  # 每次运行都从原始完整数据开始处理,避免上一次结果干扰
  dat <- raw_dat
  tot_j <- list()
  
  for (i in 0:45) {
    if (i > 0) {
      dat <- dat %>%
        group_by(Plot) %>%
        sample_n(n() - 1) %>%
        ungroup()
    }
    
    j <- dat %>%
      group_by(Category) %>%
      summarise(n = n()) %>%
      mutate(
        freq = n / sum(n),
        total = 50 - i,
        run_id = run_id # 新增字段标记本次运行的编号
      )
    
    tot_j[[i + 1]] <- j
  }
  return(bind_rows(tot_j))
}

# 执行5次重复,合并所有结果
# 请将下方raw_dat替换为你自己的初始完整数据集的变量名
all_run_res <- map_dfr(1:5, ~single_run(raw_dat = raw_dat, run_id = .x))

# 绘图
ggplot(subset(all_run_res, Category %in% c("C", "G", "Z", "S"))) +
  # group参数用于区分同分类下不同次运行的线,alpha设置透明度避免重叠看不清
  geom_line(aes(x = total, y = freq, colour = Category, group = interaction(Category, run_id)), alpha = 0.7) +
  xlim(50, 5)

关键说明

  • interaction(Category, run_id)会生成类似C.1、C.2的唯一分组标识,让ggplot识别出同分类下的5条线需要分开绘制
  • 如果你需要明确区分同分类下的不同重复,可以在aes里新增linetype = factor(run_id)参数,不同次运行的线会自动用不同线型展示
  • 透明度参数alpha可以根据你实际的绘图效果调整,取值范围为0-1,数值越低越透明

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:15:03