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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:27:32