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

如何在R中使用Shapefile制作类似COVID案例的区域可视化地图

在R中用Shapefile制作安省邮编区域填充Leaflet地图

一、数据预处理

  • 加载核心包:sf(处理空间数据)、leaflet(交互式地图)、dplyr(数据合并清洗)
  • 读取Statcan邮编Shapefile:直接用sf::st_read()读取文件路径,比如on_postal_sf <- st_read("你的Statcan shp文件路径"),注意Statcan的邮编字段通常是CFSAUID或POSTALCODE,记好这个字段名。
  • 关联你的数据:把你带邮编和冰球运动员数的数据集,和Shapefile按邮编字段合并,比如on_postal_sf <- on_postal_sf %>% left_join(your_hockey_data, by = c("POSTALCODE" = "你的数据邮编字段名")),确保两边字段名对应。
  • 转换投影:Leaflet默认用WGS84坐标系(EPSG:4326),如果Shapefile是其他投影,转成这个:on_postal_sf <- st_transform(on_postal_sf, crs = 4326)

二、制作交互式区域填充地图

直接用下面的代码框架,替换变量名即可:

library(leaflet)
library(sf)
library(dplyr)

# 生成颜色映射,这里用viridis色系,也可以换其他比如"Reds"
pal <- colorNumeric(palette = "viridis", domain = on_postal_sf$hockey_player_count)

# 构建地图
leaflet(on_postal_sf) %>%
  addTiles() %>%  # 加载默认底图
  addPolygons(
    fillColor = ~pal(hockey_player_count),  # 填充色绑定冰球运动员数变量
    fillOpacity = 0.7,  # 填充透明度,0-1之间调整
    color = "#888888",  # 区域边界颜色
    weight = 0.8,  # 边界粗细
    popup = ~paste0("邮编: ", POSTALCODE, "<br>冰球运动员数: ", hockey_player_count)  # 点击弹出的信息
  ) %>%
  addLegend(pal = pal, values = ~hockey_player_count, title = "冰球运动员数量")  # 添加右侧图例

三、关键注意事项与优化

  • 处理缺失值:合并后如果有缺失数据,用on_postal_sf <- on_postal_sf %>% filter(!is.na(hockey_player_count))过滤掉,避免地图出现空白区域。
  • 优先用Statcan数据:相比GADM,Statcan的邮编Shapefile是专门的邮区边界,更贴合你的需求,不用纠结GADM方法。
  • 静态地图备选:如果需要静态图,用ggplot2配合sf实现:
library(ggplot2)
ggplot(on_postal_sf) +
  geom_sf(aes(fill = hockey_player_count), color = "white", size = 0.1) +
  scale_fill_viridis_c(option = "plasma") +
  theme_minimal() +
  labs(fill = "冰球运动员数量", title = "安省各邮区冰球运动员分布")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:27:25