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

