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

