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

基于ggplot2复现并修改连续X、Y、Z数据的对比箱线图

实现等数量分箱的对比箱线图

要复现你需要的对比箱线图,只需完成数据整理和绘图两步即可,具体代码和步骤如下:

1. 数据预处理

先将分箱后的变量整合到原数据框,并转换为长格式(方便ggplot2批量处理多变量):

library(ggplot2)
library(dplyr)
library(tidyr)

# 生成示例数据
df <- data.frame(
  y = sample(seq(0, 500, by = 0.1), 1000, replace = T),
  x = sample(seq(0, 600, by = 0.1), 1000, replace = T),
  z = sample(seq(0, 1, by = 0.1), 1000, replace = T)
)

# 添加等数量分箱列
df <- df %>%
  mutate(
    x_bin = as.numeric(cut_number(x, 5)),  # X分为5个等数量分箱
    z_bin = as.numeric(cut_number(z, 2))   # Z分为2个等数量分箱
  )

# 转换为长格式,统一处理x/y/z三个变量
df_long <- df %>%
  pivot_longer(cols = c(x, y, z), names_to = "variable", values_to = "value")

2. 绘制对比箱线图

利用长格式数据,结合分面和分组绘制箱线图:

ggplot(df_long, aes(x = factor(x_bin), y = value, fill = variable)) +
  geom_boxplot(position = position_dodge(width = 0.8)) +  # 让不同变量的箱线并排
  facet_wrap(~z_bin, ncol = 2) +  # 按Z的分箱分成两个子图
  labs(
    x = "X分箱",
    y = "数值",
    fill = "变量"
  ) +
  theme_bw()  # 简洁主题,可根据需求替换

关键说明

  • 转换长格式是为了用一个图层同时绘制x、y、z三个变量的箱线图,避免重复写代码
  • position_dodge参数保证同一X分箱下的不同变量箱线图不会重叠
  • facet_wrap实现按Z的两个分箱分别展示,对应你需要的分组对比
  • 因为分箱是等数量划分,无需额外添加观测数标注

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:52:46