在R的ggplot中如何设置点的不同形状与填充并正确显示填充图例?
解决ggplot2中填充图例不显示颜色的问题
问题根源:geom_point同时绑定了fill=year和shape=population两个映射,当通过guides(shape="none")隐藏形状图例后,填充图例的默认符号会变成无填充属性的形状,导致颜色无法正常展示。
解决方法是在guides()中为fill图例手动指定一个带填充属性的形状,确保颜色标识正确显示:
修改后的完整代码:
population=rep(c("High", "Low"), time=5) year=rep(c("2020_H","2020_L","2020_O","2021_L","2021_O"), each=2) x=c(10,20,30,40,50,60,70,80,90,100) y=c(15,25,35,45,55,75,100,120,125,145) dataA=data.frame(population,year,x,y) ggplot(data=dataA, aes(x=x, y=y))+ stat_smooth(method='lm', linetype=1, se=FALSE, formula=y~x, linewidth=0.5, color="dark red") + geom_point(aes(fill=year, shape=population), color="black", size=4) + scale_fill_manual(values= c("Dark red","Dark blue", "Orange", "purple", "dark green"))+ scale_shape_manual(values=c(21,24))+ scale_x_continuous(breaks=seq(0,100,20),limits=c(0,100))+ scale_y_continuous(breaks=seq(0,150,50),limits=c(0,150))+ # 关键修改:指定fill图例的形状,同时隐藏shape图例 guides( shape="none", fill=guide_legend(override.aes = list(shape=21)) # 选用带填充属性的形状21 ) + theme_classic(base_size=16, base_family="serif")+ theme(legend.position=c(0.8, 0.2), legend.title=element_blank(), legend.key=element_rect(color=alpha("grey",.05), fill=alpha("grey",.05)), legend.background= element_rect(fill=alpha("grey",.05)), axis.line=element_line(linewidth=0.5, colour="black"))+ windows(width=5.5, height=5)
补充说明:
shape=21是带填充属性的圆形,你也可以换成其他同类形状(比如22正方形、23菱形、24三角形),根据视觉需求调整即可。- 通过
override.aes参数可以强制修改图例的显示样式,不受原图层映射的影响。
内容的提问来源于stack exchange,提问作者J.K Kim
相关产品推荐
相关产品推荐

