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

如何将数据框非映射元素添加至含映射元素的ggplot图例?

为ggplot地图添加总分构成变量的自定义图例

核心思路

由于这5个构成变量不需要映射到多边形图形上,我们可以通过**虚拟图层(geom_blank)**配合自定义比例尺的方式,手动生成说明总分构成的图例。同时先修正原代码中不规范的列引用方式(避免直接用minstore$,改用数据框列名)。


方案一:添加离散线条型构成图例

适合用线条区分构成变量的场景,步骤如下:

  1. 先定义构成变量的显示名称和对应颜色(可自定义):
# 替换成你的5个变量名称和偏好颜色
legend_info <- data.frame(
  component = c("维度1", "维度2", "维度3", "维度4", "维度5"),
  line_color = c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2")
)
  1. 修改ggplot代码:
ggplot() +
  # 底图图层
  annotation_map_tile(zoomin = 0, type = "osm") +
  # LSOA总分多边形图层(修正列引用方式)
  geom_sf(data = alljoined, aes(geometry = joinlsoageometry, fill = totscrtot), alpha = 0.7) +
  # 添加虚拟图层,用于触发构成变量图例生成
  geom_blank(data = legend_info, aes(color = component)) +
  # 总分填充色标设置
  scale_fill_viridis_c(name = "区域平均总分", reverse = TRUE) +
  # 构成变量颜色标设置
  scale_color_manual(
    name = "总分构成维度",
    values = setNames(legend_info$line_color, legend_info$component)
  ) +
  # 调整图例顺序与布局
  guides(
    fill = guide_colorbar(order = 1),  # 总分图例优先显示
    color = guide_legend(order = 2)    # 构成图例后置
  ) +
  theme(legend.position = "right")  # 可按需修改位置,如"bottom"

方案二:添加离散色块型构成图例(双填充图例)

如果需要用色块展示构成变量,由于ggplot默认只能有一个填充比例尺,需借助ggnewscale包实现双填充图例:

  1. 先安装并加载包:
install.packages("ggnewscale")
library(ggnewscale)
  1. 定义构成变量信息:
legend_info <- data.frame(
  component = c("维度1", "维度2", "维度3", "维度4", "维度5"),
  fill_color = c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2")
)
  1. 修改ggplot代码:
ggplot() +
  annotation_map_tile(zoomin = 0, type = "osm") +
  # 总分多边形图层
  geom_sf(data = alljoined, aes(geometry = joinlsoageometry, fill = totscrtot), alpha = 0.7) +
  # 总分填充色标
  scale_fill_viridis_c(name = "区域平均总分", reverse = TRUE) +
  # 开启新的填充比例尺,避免与总分填充冲突
  new_scale_fill() +
  # 虚拟图层触发构成色块图例
  geom_blank(data = legend_info, aes(fill = component)) +
  # 构成变量填充色标
  scale_fill_manual(
    name = "总分构成维度",
    values = setNames(legend_info$fill_color, legend_info$component)
  ) +
  # 调整图例顺序
  guides(
    fill = guide_legend(order = 2)
  )

关键注意事项

  • 原代码中aes(geometry = minstore$joinlsoageometry)的写法不规范:geom_sf已指定data = alljoined,直接写列名joinlsoageometry即可,否则可能引发数据匹配错误。
  • 颜色可自由替换,比如使用RColorBrewer包的配色(如brewer.pal(5, "Set1"))。

内容的提问来源于stack exchange,提问作者JMW

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 00:10:35