基于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
相关产品推荐
相关产品推荐

