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

基于不同seed的多DataFrame同列箱线图绘制需求

解决方案:多DataFrame分组箱线图绘制

1. 数据合并与格式转换

先把5个seed的DataFrame合并,加上seed列标记来源,再转成长格式适配绘图需求:

# 加载必备工具包
library(tidyverse)

# 将所有seed的DataFrame放入列表,自动添加seed标识后合并
df_list <- list(seed1 = seed1, seed2 = seed2, seed3 = seed3, seed4 = seed4, seed5 = seed5)
combined_df <- bind_rows(df_list, .id = "seed")

# 提取目标列并转成长格式,拆分列名为类型和模型后缀
long_df <- combined_df %>%
  select(seed, starts_with(c("cr", "pd", "st_po"))) %>%
  pivot_longer(
    cols = -seed,
    names_to = c("type", "model"),
    names_pattern = "(cr|pd|st_po)_(.*)"
  )

2. 绘制分组箱线图

用ggplot2实现3组箱线图布局:每组对应一类列(cr/pd/st_po),每组内每行对应一个DataFrame,每个模型用不同颜色区分:

ggplot(long_df, aes(x = model, y = value, fill = model)) +
  # 按seed分行、type分列,y轴自由缩放适配不同分数范围
  facet_grid(seed ~ type, scales = "free_y") +
  geom_boxplot(show.legend = FALSE) +
  # 设置标签和主题
  labs(x = "模型变体", y = "预测分数") +
  theme_bw() +
  theme(
    strip.text.y = element_text(angle = 0), # seed标签横向显示更清晰
    axis.text.x = element_text(angle = 45, hjust = 1) # x轴标签倾斜避免重叠
  )

关键逻辑说明

  • bind_rows(.id = "seed"):批量合并DataFrame时自动添加来源标识,不用手动逐个处理
  • pivot_longer:把宽格式数据转成ggplot偏好的长格式,通过正则表达式拆分列名,自动区分数据类型和模型变体
  • facet_grid(seed ~ type):精准实现“每行一个seed,每类列一组图”的布局
  • scales = "free_y":不同类型的预测分数范围差异可能较大,自由缩放y轴能更清晰展示分布

示例数据测试

如果用你提供的示例数据(假设为seed1),可以快速模拟其他seed的数据集验证效果:

set.seed(123)
# 给示例数据添加小噪声生成其他seed的DataFrame
seed2 <- seed1 %>% mutate(across(starts_with(c("cr", "pd", "st_po")), ~ . + rnorm(n(), 0, 0.02)))
seed3 <- seed1 %>% mutate(across(starts_with(c("cr", "pd", "st_po")), ~ . + rnorm(n(), 0, 0.02)))
seed4 <- seed1 %>% mutate(across(starts_with(c("cr", "pd", "st_po")), ~ . + rnorm(n(), 0, 0.02)))
seed5 <- seed1 %>% mutate(across(starts_with(c("cr", "pd", "st_po")), ~ . + rnorm(n(), 0, 0.02)))

# 执行前面的合并和绘图代码即可生成目标箱线图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:47:04