如何移除ggpattern中pattern_fill生成的多余图例?
解决ggpattern中pattern_fill生成多余图例的问题
问题说明
使用ggpattern包绘制地图时,若在geom_polygon_pattern的aes()中设置pattern_fill='#ff4f8a',会自动生成一个多余的顶部图例;但如果移除aes()中的pattern_fill参数,图例消失的同时,图案条纹会变为默认灰色。需要在保留条纹颜色#ff4f8a的前提下,移除这个不必要的图例。
解决方案
核心思路是不要将pattern_fill放入aes()映射中,而是将其作为geom_polygon_pattern的图层参数直接设置。这样既不会触发ggplot自动生成图例,又能指定条纹的颜色。同时可以移除原代码中针对pattern_fill的图例隐藏设置,因为此时不会再生成该图例。
修改要点
- 将
aes()内的pattern_fill='#ff4f8a'移到图层参数区域 - 删除
guides()中的pattern_fill = guide_legend(position = 'none')语句
修改后的完整绘图代码
map3 <- ggplot(mapdata, aes(x = long, y = lat)) + geom_polygon_pattern(aes(fill = as.factor(main), group = group, pattern = as.factor(main)), pattern_fill = '#ff4f8a', # 移至此处作为图层参数 colour = 'grey30', pattern_density = .5, pattern_spacing = .025, pattern_colour = 'NA') + annotate( geom = 'curve', x = 135, y = 40, xend = 75, yend = 25, curvature = -0.9, linewidth = 2, colour = '#0b81ac', alpha = .4 ) + coord_sf(xlim = c(70, 145), ylim = c(55, -15)) + scale_fill_manual(values = c("grey", "#1481ff", "#b16cec", "#b16cec", "#ff4f8a", "#ff6b52", "#ff9214"), labels = c("Nøytral", "Alliert USA", "USA", "USA og Kina", "Kina", "Alliert Kina", "Kina"), name = 'Militært samarbeid:') + scale_pattern_manual(values = c('none', 'none', 'none', 'stripe', 'none', 'none', 'none'), labels = c("Nøytral", "Alliert USA", "USA", "USA og Kina", "Kina", "Alliert Kina", "Kina"), name = 'Militært samarbeid:') + labs(colour = "Militærbaser:") + guides(pattern = guide_legend(override.aes = list(fill = c("grey", "#1481ff", "#b16cec", "#b16cec", "#ff4f8a", "#ff6b52", "#ff9214"), pattern_fill = '#ff4f8a'))) + theme(axis.text = element_blank(), axis.title = element_blank(), axis.ticks = element_blank(), legend.position = "right", panel.background = element_rect(fill = "#ccf3ff"), panel.grid.major = element_blank(), panel.grid.minor = element_blank()) map3
效果说明
修改后,地图中的条纹颜色仍保持#ff4f8a,同时不会出现多余的pattern_fill图例,仅保留合并后的Militært samarbeid:图例,符合需求。
内容的提问来源于stack exchange,提问作者Henning Åsheim
相关产品推荐
相关产品推荐

