为重叠轮廓条形图设置独立图例项
解决ggplot重叠条形图轮廓图例不显示的问题
你的问题核心是没有将轮廓颜色映射到aes()中,而是直接给colour赋值固定值,导致scale_color_manual无法识别对应的分组,自然生成不了独立图例。以下是修正后的代码和关键说明:
修正后的代码
d <- data.frame(grp=c('a','b','c'), fmlb=c(100,115,125), old=c(20,35,15), mat=c(10,15,5)) p <- ggplot() + # 底层填充条形 geom_col(data=d, aes(x=grp, y=fmlb, fill=grp), stat="identity") + # 绿色轮廓条形(Mature):将colour映射到aes中,fill设为NA实现仅轮廓 geom_col(data=d, aes(x=grp, y=mat, colour="Mature"), fill=NA, size=0.5, stat="identity", position=position_nudge(y=d$old)) + # 黑色轮廓条形(Old):同理映射colour到aes,fill设为NA geom_col(data=d, aes(x=grp, y=old, colour="Old"), fill=NA, size=0.5, position="dodge") + # 手动指定颜色映射,对应aes中的分组名称 scale_color_manual(name="子组件", values = c("Old" = "black", "Mature" = "green"), guide = guide_legend(order = 2)) + # 可选:如果不需要底层填充的图例,可添加以下代码隐藏 # scale_fill_discrete(guide="none") p
关键修改点
- 把
colour="green"/colour="black"移到aes()内部,定义为colour="Mature"/colour="Old",让ggplot识别这是两个需要生成图例的分组。 - 将
alpha=0替换为fill=NA,更直接地实现“仅显示轮廓、无填充”的效果,避免alpha可能带来的视觉偏差。 scale_color_manual的values参数要和aes()中定义的分组名称完全对应("Old"和"Mature"),确保颜色匹配正确。
修改后,黑色和绿色的轮廓条形会在图例中显示独立条目,同时保留原有图表的布局效果。
内容的提问来源于stack exchange,提问作者fowlermw
相关产品推荐
相关产品推荐

