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

在R中绘制组合箱线图的两种实现方案

在R中绘制两种布局的组合箱线图

需要实现两种布局的组合箱线图:

  • 方式1:不同性别共用一个X轴
  • 方式2:每个性别设置独立的X轴

以下是测试数据:

df <- structure(list(gender = c("Male", "Male", "Male", "Male", "Male", 
"Male", "Male", "Male", "Male", "Male", "Male", "Male", "Male", 
"Male", "Male", "Male", "Male", "Male", "Male", "Male", "Male", 
"Male", "Male", "Male", "Male", "Male", "Male", "Male", "Male", 
"Male", "Male", "Male", "Male", "Male", "Male", "Male", "Male", 
"Male", "Male", "Male", "Male", "Male", "Male", "Male", "Male", 
"Male", "Male", "Male", "Male", "Male", "Female", "Female", "Female", 
"Female", "Female", "Female", "Female", "Female", "Female", "Female", 
"Female", "Female", "Female", "Female", "Female", "Female", "Female", 
"Female", "Female", "Female", "Female", "Female", "Female", "Female", 
"Female", "Female", "Female", "Female", "Female", "Female", "Female", 
"Female", "Female", "Female", "Female", "Female", "Female", "Female", 
"Female", "Female", "Female", "Female", "Female", "Female", "Female", 
"Female", "Female", "Female", "Female", "Female"), education = c("Education", 
"Education", "Education", "Education", "Education", "Education", 
"Education", "Education", "Education", "Education", "Education", 
"Education", "Education", "Education", "Education", "Education", 
"Education", "Education", "Education", "Education", "Education", 
"Education", "Education", "Education", "Education", "Education", 
"Education", "Education", "Education", "Education", "Education", 
"Education", "Education", "Education", "Education", "Education", 
"Education", "Education", "Education", "Education", "Education", 
"Education", "Education", "Education", "Education", "Education", 
"Education", "Education", "Education", "Education", "No Education", 
"No Education", "No Education", "No Education", "No Education", 
"No Education", "No Education", "No Education", "No Education", 
"No Education", "No Education", "No Education", "No Education", 
"No Education", "No Education", "No Education", "No Education", 
"No Education", "No Education", "No Education", "No Education", 
"No Education", "No Education", "No Education", "No Education", 
"No Education", "No Education", "No Education", "No Education", 
"No Education", "No Education", "No Education", "No Education", 
"No Education", "No Education", "No Education", "No Education", 
"No Education", "No Education", "No Education", "No Education", 
"No Education", "No Education", "No Education", "No Education", 
"No Education", "No Education", "No Education"), salary = c(54395.2435344779, 57698.2251051672, 
75587.0831414912, 60705.0839142458, 61292.8773516095, 77150.6498688328, 
64609.162059892, 47349.3876539347, 53131.4714810647, 55543.3802990004, 
72240.8179743946, 63598.1382705736, 64007.7145059405, 61106.8271594512, 
54441.5886524592, 77869.1313680308, 64978.5047822924, 40333.8284337036, 
67013.5590156369, 55272.0859227207, 49321.7629401315, 57820.250853417, 
49739.9555169276, 52711.0877070886, 53749.6073215074, 54395.2435344779, 
57698.2251051672, 75587.0831414912, 60705.0839142458, 61292.8773516095, 
77150.6498688328, 64609.162059892, 47349.3876539347, 53131.4714810647, 
55543.3802990004, 72240.8179743946, 63598.1382705736, 64007.7145059405, 
61106.8271594512, 54441.5886524592, 77869.1313680308, 64978.5047822924, 
40333.8284337036, 67013.5590156369, 55272.0859227207, 49321.7629401315, 
57820.250853417, 49739.9555169276, 52711.0877070886, 53749.6073215074, 
23253.2267570303, 33351.1481779781, 30613.4924713461, 25447.4522519522, 
35015.2596842797, 31705.8568859073, 28819.7140680309, 33580.5026441801, 
33512.5339501322, 33286.3243265499, 32754.5610164004, 32215.6706141504, 
29752.3531576931, 28776.1493450403, 28478.1159959505, 27221.172084318, 
29168.3308879216, 24938.4145937269, 38675.8238613541, 34831.84799322, 
25507.5656671866, 28388.4606588037, 28133.3785855071, 33119.8604733453, 
29666.5237341127, 23253.2267570303, 33351.1481779781, 30613.4924713461, 
25447.4522519522, 35015.2596842797, 31705.8568859073, 28819.7140680309, 
33580.5026441801, 33512.5339501322, 33286.3243265499, 32754.5610164004, 
32215.6706141504, 29752.3531576931, 28776.1493450403, 28478.1159959505, 
27221.172084318, 29168.3308879216, 24938.4145937269, 38675.8238613541, 
34831.84799322, 25507.5656671866, 28388.4606588037, 28133.3785855071, 
33119.8604733453, 29666.5237341127)), class = "data.frame", row.names = c(NA, 
-100L))

方式1:不同性别共用一个X轴

这种布局将gender作为分组变量,在同一个X轴下展示不同教育水平的薪资分布,用颜色区分性别。

library(ggplot2)

ggplot(df, aes(x = education, y = salary, fill = gender)) +
  geom_boxplot(position = position_dodge(width = 0.8), width = 0.7) +
  labs(title = "薪资与教育水平、性别的关系",
       x = "教育水平",
       y = "薪资",
       fill = "性别") +
  theme_minimal()

关键参数说明

  • position = position_dodge(width = 0.8):让不同性别的箱线图在同一X轴类别下并排展示,避免重叠
  • fill = gender:用颜色区分不同性别组

方式2:每个性别设置独立的X轴

这种布局将图表按gender分面,每个性别拥有独立的X轴,便于单独观察不同性别内教育水平对薪资的影响。

ggplot(df, aes(x = education, y = salary)) +
  geom_boxplot(fill = "#4287f5", width = 0.7) +
  facet_wrap(~gender, scales = "free_x") +  # scales = "free_x" 让每个分面的X轴独立
  labs(title = "不同性别下薪资与教育水平的关系",
       x = "教育水平",
       y = "薪资") +
  theme_minimal()

关键参数说明

  • facet_wrap(~gender, scales = "free_x"):按性别分面,scales = "free_x"确保每个分面的X轴只显示对应性别存在的教育水平类别(注:本例中每个性别对应单一教育水平,实际多类别数据下效果更明显)
  • 若需要保留统一X轴但分面,可去掉scales = "free_x"参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:50:53