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

R语言usmap包解压问题:如何保留州名及版本变更疑问

usmap包地图数据处理问题解答

解压时保留州名的正确写法

你现在的代码里st_coordinates()会丢掉州名,因为它只输出纯坐标矩阵,不带原数据的属性信息。可以这么改,把州名和坐标绑定在一起:

library(sf)
library(dplyr)
library(tidyr)

# 获取压缩格式的地图数据
us_states <- usmap::us_map()

# 转换为sf对象并拆分坐标,同时保留州名
us_map_long <- st_as_sf(us_states) %>%
  # 给每个州的几何对象加唯一ID
  mutate(poly_id = row_number()) %>%
  # 将复合多边形拆分为单个多边形
  st_cast("POLYGON") %>%
  # 提取每个多边形的坐标并转为数据框
  mutate(coords = purrr::map(geometry, ~as.data.frame(st_coordinates(.x)))) %>%
  # 展开坐标数据
  unnest(coords) %>%
  # 保留需要的列
  select(state, X, Y, poly_id)

这样得到的结果里就有完整的州名和对应的坐标点了。

为什么us_map()输出变成压缩格式?

usmap包在后续版本更新中(大概v0.7.0之后)切换了数据存储方式,从原来的长格式坐标行改成用sf的sfc类型列存储每个州的几何边界。这么做的核心原因是:

  • 缩小数据体积:原来每个坐标点占一行,现在每个州只占一行,几何数据压缩存储,省内存
  • 提升处理速度:sf格式支持更高效的空间运算,比如裁剪、合并等操作
  • 适配主流工具:和sf、ggplot2等现代空间可视化包的兼容性更好

不用手动解压的更优方案

其实完全没必要自己写解压代码,usmap包本身提供了更简便的操作方式:

  • 直接绘制地图:用plot_usmap()一键生成,还支持加标签、自定义颜色:
    library(usmap)
    # 绘制带州名标签的美国地图
    plot_usmap(regions = "states", labels = TRUE, label_color = "darkblue")
    
  • 配合ggplot2使用:用get_usmap()获取标准sf对象,直接传入ggplot即可:
    library(ggplot2)
    us_sf <- get_usmap(regions = "states")
    ggplot(us_sf) +
      geom_sf(aes(fill = state)) +
      theme_void() +
      labs(title = "美国各州地图")
    
  • 如果确实需要长格式坐标数据,上面的tidyverse方法就是最稳妥的,比你原来的临时方案更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 12:57:42