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

如何在R的ggplot中为分组箱线图实现类别+性别分层配色?

实现分层颜色的分组箱线图(ggplot2)

完全可以实现你要的效果,核心思路是将种族+性别的组合作为填充色的映射维度,手动或程序化指定“种族对应主色、性别控制深浅”的配色方案,再通过position_dodge实现同种族内男女箱线图的并排展示。

步骤1:构造模拟数据(替换为你的真实数据即可)

library(ggplot2)
library(dplyr)

set.seed(123)
# 生成包含种族、性别、测试分数的模拟数据集
df <- expand.grid(race = c("White", "Black", "Asian"),
                  gender = c("male", "female")) %>%
  group_by(race, gender) %>%
  mutate(test_score = rnorm(50, 
                            mean = case_when(race == "White" ~ 75, race == "Black" ~ 70, race == "Asian" ~ 80) + 
                              case_when(gender == "female" ~ 3, TRUE ~ 0),
                            sd = 8)) %>%
  ungroup()

步骤2:指定配色方案(两种方式可选)

方式一:手动定义颜色值

直接为每个(种族,性别)组合指定深浅对应的色值:

color_palette <- c(
  "White_male" = "#ff9999",    # 男性白人:浅红
  "White_female" = "#cc0000",  # 女性白人:深红
  "Black_male" = "#99ccff",    # 男性黑人:浅蓝
  "Black_female" = "#0066cc",  # 女性黑人:深蓝
  "Asian_male" = "#cc99ff",    # 男性亚裔:浅紫
  "Asian_female" = "#9933cc"   # 女性亚裔:深紫
)

方式二:用colorspace包自动生成深浅色

如果不想手动找色值,可以用colorspace的lighten函数基于种族主色生成浅色(男性)和原色(女性):

library(colorspace)

# 定义种族对应的主色
base_colors <- c(White = "#cc0000", Black = "#0066cc", Asian = "#9933cc")
# 生成深浅色组合:男性用浅40%的色调,女性用主色
color_palette <- c(
  set_names(lighten(base_colors, 0.4), paste0(names(base_colors), "_male")),
  set_names(base_colors, paste0(names(base_colors), "_female"))
)
# 调整顺序,让同种族的男女组合挨在一起
color_palette <- color_palette[c("White_male", "White_female", "Black_male", "Black_female", "Asian_male", "Asian_female")]

步骤3:绘制分组箱线图

ggplot(df, aes(x = race, y = test_score, fill = interaction(gender, race))) +
  # 设置箱线图的并排间距,避免重叠
  geom_boxplot(position = position_dodge(width = 0.8), width = 0.7) +
  # 应用自定义配色方案,修改图例标签和名称
  scale_fill_manual(values = color_palette,
                    labels = c("White Male", "White Female", "Black Male", "Black Female", "Asian Male", "Asian Female"),
                    name = "Demographic Group") +
  # 设置坐标轴和标题
  labs(x = "Race", y = "Test Score", title = "Test Scores by Race and Gender") +
  # 选用简洁的主题(可替换为你喜欢的主题)
  theme_minimal()

关键细节说明

  • interaction(gender, race)将两个变量组合成唯一的分组标识,确保每个(种族,性别)对对应独立的填充色
  • position_dodge(width = 0.8)让同种族的两个箱线图并排展示,width = 0.7控制单个箱线图的宽度,避免拥挤
  • 配色方案完全可自定义,你可以根据需求调整色值或深浅程度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:44:56