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

ggplot箱线图:为分组图案设置不同颜色并解决对齐问题

解决ggpattern箱线图图案错位问题

你的问题出在叠加了两个箱线图图层,且没有明确指定分组规则,导致带图案的图层和普通图层的位置没对齐。其实不需要画两层geom_boxplot,只用geom_boxplot_pattern就能同时实现填充色和图案的区分,关键是要让ggplot知道怎么分组并列。

修正后的代码如下:

set.seed(3)
values <- rnorm(36)
library(ggplot2)
library(ggpattern)

mydat <- data.frame(time = factor(c(rep(0, 12), rep(1, 12), rep(2, 12))),
                    class = factor(rep(c(rep("A", 6), rep("B", 6)), 3)),
                    method = factor(rep(c(rep("Manual", 3), rep("Automatic", 3)), 6)),
                    value = values)

ggplot(mydat, aes(x = time, y = value)) +
  geom_boxplot_pattern(
    aes(fill = method, pattern = class, 
        pattern_fill = class, group = interaction(method, class)),
    position = position_dodge(width = 0.8),
    pattern_density = 0.35,
    pattern_spacing = 0.02  # 可选,调整图案间距让效果更清晰
  ) +
  labs(fill = "Method", pattern = "Class", pattern_fill = "Class") +
  theme_minimal()

关键调整点:

  • 新增group = interaction(method, class):告诉ggplot要按method和class的组合来分组并列,每个time下的4个分类能正确排列。
  • 只保留geom_boxplot_pattern一个图层:它本身就能画出带填充和图案的箱线图,不需要叠加普通箱线图。
  • 调整图例标签:让图例对应更清晰。

这样生成的图里,每个时间点下的四个箱线图会完全对齐,用填充色区分method,图案区分class,和你期望的效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:54:55