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

如何移除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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 03:50:11