为何我的ggplot图例无法填充颜色?技术问题求助
解决ggplot图例无法显示填充颜色的问题
问题原因
你的代码中同时使用了geom_boxplot(映射colour=species)和geom_jitter(映射fill=species+shape=type),ggplot会自动合并同一变量(species)的图例。但geom_boxplot的图例默认是无填充的线条/框样式,合并后会覆盖geom_jitter的带填充形状的图例样式,导致看不到填充颜色。
解决方案
方法1:隐藏geom_boxplot的图例
直接在geom_boxplot中添加show.legend=FALSE参数,让species的图例仅由geom_jitter生成,这样就能正常显示填充颜色:
ggplot(all,aes(x=substrate, y=Ca))+ geom_boxplot(data=weed,aes(colour=species), show.legend=FALSE)+ scale_colour_manual(values="green3",name=NULL,labels="substrate mineral content")+ geom_jitter(position = position_jitter(width = 0.22), alpha=0.75, size=3.5, aes(fill=species,shape=type))+ scale_fill_manual(values=c("red","blue","purple","darkorange","darkgrey","orange2","grey2","darkgreen","black"))+ scale_shape_manual(values=c(24,21,22))+ labs(y="Ca mg/kg")
方法2:手动统一图例样式(若需保留boxplot图例)
如果需要同时展示boxplot的图例和jitter的填充样式,可以通过guides()手动设置species图例的key形状,让它使用带填充的形状:
ggplot(all,aes(x=substrate, y=Ca))+ geom_boxplot(data=weed,aes(colour=species))+ scale_colour_manual(values="green3",name=NULL,labels="substrate mineral content")+ geom_jitter(position = position_jitter(width = 0.22), alpha=0.75, size=3.5, aes(fill=species,shape=type))+ scale_fill_manual(values=c("red","blue","purple","darkorange","darkgrey","orange2","grey2","darkgreen","black"))+ scale_shape_manual(values=c(24,21,22))+ labs(y="Ca mg/kg")+ guides(fill=guide_legend(override.aes=list(shape=21)))
补充说明
当你移除geom_boxplot并将fill=species改为colour=species时,图例仅由geom_jitter的colour映射生成,没有其他图例干扰,所以颜色显示正常——本质是避免了不同图层同变量映射的图例冲突。
内容的提问来源于stack exchange,提问作者Finbar
相关产品推荐
相关产品推荐

