如何为ggplot中的geom_ribbon设置图例名称并显示图例?
解决geom_ribbon图例显示问题
要让geom_ribbon的阴影区域出现在图例中,你需要将fill映射到分类标签(而非直接指定颜色),再通过scale_fill_manual定义颜色和图例名称。以下是修改后的完整代码:
TM_M_WILD_plot <- ggplot(data = TM_M_WILD, aes(x = Age, y = MeasurementValue, group = Sex, colour = Sex)) + geom_point(size = 4.5) + # 为每个阴影区域在aes中指定fill标签,用于生成图例项 geom_ribbon(aes(ymin = 163, ymax = 386, fill = "低体重区间"), alpha= 0.6, colour = NA) + geom_ribbon(aes(ymin = 331, ymax = 979, fill = "高体重区间"), alpha= 0.6, colour = NA) + scale_color_manual(values = c('black')) + # 定义阴影区域的颜色和图例标题 scale_fill_manual(name = "体重区间", values = c("低体重区间" = "royalblue", "高体重区间" = "orange")) + scale_x_continuous(expand=c(0, 0), limits=c(0, 40), breaks = seq(0, 40, 5)) + scale_y_continuous(expand=c(0, 0), limits=c(0, 1000), breaks = seq(0, 1000, 200), guide=guide_axis(minor.ticks = TRUE)) + labs( x = "年龄(岁)", y = "体重(Kg)", title = "按年龄划分的体重") + theme_gray(base_size = 55) # 调整主题,显示图例并匹配整体风格 TM_M_WILD_plot + theme(panel.background = element_rect(fill = "white"), panel.grid.major = element_line(colour = "grey", size=0.5), panel.grid.minor = element_blank(), axis.line = element_line(size = 0.9, linetype = "solid", colour = "black"), axis.text = element_text(colour="black"), legend.title = element_text(size = 55), legend.text = element_text(size = 55), plot.title = element_blank())
关键修改点:
- 移除主aes中的
fill=Sex:原代码中该映射未实际使用,且会与阴影区域的fill映射冲突。 - 为每个geom_ribbon添加fill映射:在
aes()内指定自定义标签,让ggplot识别需要生成图例的分类项。 - 更新
scale_fill_manual:绑定标签与对应颜色,同时设置图例标题。 - 调整主题显示图例:删除
legend.position="none",并调整图例文字/标题大小以匹配图表整体风格。
内容的提问来源于stack exchange,提问作者JPM
相关产品推荐
相关产品推荐

