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

