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

在R的ggplot2与sf中添加交通线路图例及背景地图问题

问题解决方法

一、为交通线路添加图例并调整尺寸

你当前代码中单独调用geom_sf绘制每条线路时,直接指定color参数不属于ggplot的美学映射,因此无法生成图例。解决思路是将4条线路合并为一个sf对象,新增线路名称列后通过aes()映射颜色和尺寸:

  1. 合并线路数据:
# 给每条线路添加标识列
T1$line <- "T1"
T2$line <- "T2"
T3$line <- "T3"
T4$line <- "T4"

# 合并为单个sf对象
all_lines <- rbind(T1, T2, T3, T4)
  1. 修改ggplot线路绘制部分:
    替换原有的4个geom_sf为一个,通过aes()映射color和size,再手动指定颜色与尺寸:
ggplot() +
  geom_sf(data = Geo_3M) +
  # 合并后的线路图层,映射颜色和尺寸到线路标识
  geom_sf(data = all_lines, aes(color = line, size = line)) +
  # 指定每条线路的颜色
  scale_color_manual(values = c("T1" = "blue", "T2" = "orange", "T3" = "green", "T4" = "brown")) +
  # 指定每条线路的粗细,数值按需调整
  scale_size_manual(values = c("T1" = 1.5, "T2" = 1.2, "T3" = 1, "T4" = 0.8)) +
  # 保留原有图层设置
  geom_point(data = tableau_résultat, aes(x = Longitude, y = Latitude, size = nb_endTime, color = categorie)) +
  scale_color_manual(values = couleurs, name = "Duration") + # 重命名避免图例冲突
  geom_point(data = Gare, aes(x = lon, y = lat), shape=24, fill="blue") +
  theme(
        panel.background = element_rect(fill = "white", color = NA),
        plot.background = element_rect(fill = "white", color = NA),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        axis.text.x=element_blank(),
        axis.ticks.x=element_blank(),
        axis.text.y=element_blank(),
        axis.ticks.y=element_blank(),
        axis.title.x = element_blank(),
        axis.title.y = element_blank())+
  labs(size = "Nb")

注:因两个图层使用了color美学,需通过name参数分别命名图例,避免混淆。

二、添加OSM浅色背景地图

使用ggspatial包的annotation_map_tile()函数实现,步骤如下:

  1. 安装并加载包:
install.packages("ggspatial")
library(ggspatial)
  1. 在ggplot开头添加背景图层,注意坐标系匹配:
    若你的sf对象为WGS84(EPSG:4326),直接使用以下代码:
ggplot() +
  # 添加浅色OSM背景,zoom值越大越清晰
  annotation_map_tile(type = "cartolight", zoom = 12) +
  # 若Geo_3M为面图层,设置fill=NA避免遮挡背景
  geom_sf(data = Geo_3M, fill = NA) +
  geom_sf(data = all_lines, aes(color = line, size = line)) +
  scale_color_manual(values = c("T1" = "blue", "T2" = "orange", "T3" = "green", "T4" = "brown")) +
  scale_size_manual(values = c("T1" = 1.5, "T2" = 1.2, "T3" = 1, "T4" = 0.8)) +
  geom_point(data = tableau_résultat, aes(x = Longitude, y = Latitude, size = nb_endTime, color = categorie)) +
  scale_color_manual(values = couleurs, name = "Duration") +
  geom_point(data = Gare, aes(x = lon, y = lat), shape=24, fill="blue") +
  theme(
        panel.background = element_rect(fill = "white", color = NA),
        plot.background = element_rect(fill = "white", color = NA),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        axis.text.x=element_blank(),
        axis.ticks.x=element_blank(),
        axis.text.y=element_blank(),
        axis.ticks.y=element_blank(),
        axis.title.x = element_blank(),
        axis.title.y = element_blank())+
  labs(size = "Nb") +
  # 确保图层与背景坐标系一致
  coord_sf(crs = 4326)

若数据使用其他坐标系(如UTM),将coord_sf()的crs参数改为对应EPSG代码即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:08:09