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

ggplot2 & ggpattern:fill与pattern结合时如何强制图例为单行?

解决ggplot2+ggpattern图例底部单行显示问题

你遇到的问题根源在于fill、colour、pattern_angle三个美学映射各自生成了独立图例,即便单独给每个图例设置nrow=1,它们仍会在底部分开排列,无法形成整体单行效果。核心解决思路是将三个图例合并为一个,再统一设置单行显示。

修改后的代码

library(ggplot2)
library(ggpattern)

ggplot(mpg, aes(cty, hwy, group=trans, fill=trans, colour=trans)) +
  geom_col_pattern( 
    aes(pattern_angle=trans),
    pattern_fill='black',                  
    pattern_colour=NA,
    pattern='stripe',
    position=position_dodge()) +  
  scale_pattern_angle_discrete(labels=c(1:10)) +
  scale_fill_discrete(labels=c(1:10)) +
  scale_colour_discrete(labels=c(1:10)) +
  theme(legend.position = "bottom") +
  # 让colour和pattern_angle复用fill的图例,合并后设置单行
  guides(
    fill = guide_legend(nrow = 1),
    colour = "fill",
    pattern_angle = "fill"
  )

原理说明

  • 用colour = "fill"和pattern_angle = "fill"将colour、pattern_angle的图例与fill图例合并,避免生成多个独立图例。
  • 仅对合并后的fill图例设置nrow=1,即可让所有图例项在底部以单行排列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:46:21