如何在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
相关产品推荐
相关产品推荐

