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

在R中绘制蒙特利尔行政区地图遇问题,请求修正代码

修正后的蒙特利尔行政区地图绘制代码

原代码未筛选特定层级的行政边界,导致获取了包含城市、省级等更高层级的边界,覆盖了目标行政区。以下是修正后的代码,可完整显示所有蒙特利尔行政区并添加名称标签:

library(osmdata)
library(ggplot2)
library(sf)

# 获取蒙特利尔行政区边界数据,筛选admin_level=9(对应蒙特利尔行政区层级)
montreal_boroughs <- getbb("Montreal, Quebec, Canada") %>%
  opq(timeout = 50) %>%
  add_osm_feature(key = "boundary", value = "administrative") %>%
  add_osm_feature(key = "admin_level", value = "9") %>% # 指定行政区层级
  osmdata_sf()

# 提取多边形数据并保留名称字段
boroughs_sf <- montreal_boroughs$osm_multipolygons %>%
  select(name, geometry) %>%
  filter(!is.na(name)) # 过滤无名称的无效条目

# 计算每个行政区的中心坐标,用于放置标签
borough_centroids <- st_centroid(boroughs_sf)

# 绘制地图并添加标签
ggplot() +
  geom_sf(data = boroughs_sf, fill = "#e0f2f1", color = "#263238", linewidth = 0.5) +
  geom_sf_text(data = borough_centroids, aes(label = name), size = 3, color = "#004d40") +
  coord_sf(xlim = st_bbox(boroughs_sf)[c(1,3)], ylim = st_bbox(boroughs_sf)[c(2,4)]) + # 聚焦行政区范围
  theme_void() +
  labs(title = "蒙特利尔行政区地图",
       caption = "数据来源:OpenStreetMap")

关键修正说明:

  • 新增add_osm_feature(key = "admin_level", value = "9")筛选蒙特利尔专属的行政区层级,排除其他层级的边界干扰。
  • 用sf包的st_centroid计算多边形中心,确保标签精准落在每个行政区的核心位置。
  • 过滤无名称条目,避免无效标签显示。
  • 设置coord_sf的视图范围,确保所有行政区完整展示在画布内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 13:42:13