You need to enable JavaScript to run this app. R语言中如何使用sf与tmap包绘制多州/全美观县级行政地图
优惠活动
大模型
产品
解决方案
定价
更多

R语言中如何使用sf与tmap包绘制多州/全美观县级行政地图

问题核心误区说明

你之前能成功读取的nc.shp是sf包内置的唯一演示样本,这个包本身没有附带其他州的县级矢量数据。

你使用的system.file("shape/nc.shp", package="sf")是包内置文件的固定寻址路径,这个路径下仅存放北卡罗来纳州的演示shp文件,直接把路径里的文件名替换成sc.shp、va.shp,既找不到对应实体文件,读取到的空对象也没有原数据自带的AREA、NAME等字段,才会触发Error: Fill argument neither colors nor valid variable name(s)报错。

可直接在R环境获取全美县级数据的方案

所有方案都不需要手动下载shapefile,写完代码即可直接获取可绘图的sf格式矢量数据:

  • 用tigris包:对接美国人口普查局官方开放数据接口,可按需拉取指定州/全美范围的县级矢量,支持简化边界版本,文件体积小、绘图加载快。比如拉取单州数据时,只要在参数里指定对应州的两位缩写即可,多州只需传入缩写向量。
  • 用albersusa包:内置已经适配全美地图常用等积圆锥投影的县级、州级矢量数据,拉取后无需手动调整投影,绘制全国范围图时视觉效果更协调。
  • 用maps包内置的地理数据:通过map_data()函数拉取的县级数据为表格格式,简单转成sf对象即可适配tmap,适合轻量化快速绘图场景。

适配你现有tmap绘图流程的可复现代码

整体绘图逻辑完全保留你之前的代码结构,仅调整数据获取、对应字段匹配的部分即可运行:

library(tmap)
library(tigris)
library(sf)
library(tidyverse)

options(scipen = 999)

# 拉取指定多州的县级数据,替换成你需要的州缩写即可,单州、全美都支持
multi_state_county <- counties(
  state = c("NC", "SC", "VA"), 
  cb = TRUE, # 使用简化边界版本,加载更快
  progress_bar = FALSE
)

# 按照你的分类逻辑生成Code字段,注意对应匹配数据自带的面积列、名称列
county_plot_data <- multi_state_county %>% 
  mutate(Code = case_when(
    ALAND <= 200000000 ~ "Label 1", # 面积阈值可根据你的分类标准校准,和原演示数据的AREA字段做换算即可
    TRUE ~ "Label 2"
  ))

# 绘图逻辑和你之前的代码完全一致
tm_shape(county_plot_data)+
  tm_polygons("Code", id = "NAMELSAD", palette = "Blues") # id列替换为数据自带的县级名称字段即可

tmap_mode("view")
tmap_last()

分区/多州展示的实用技巧

  • 拉取跨区域多州数据时,直接把对应分区的州缩写传入state参数即可,数据自带统一投影,拼接后不会出现边界错位问题。
  • 需要按南北/东西分区分面展示时,只需给数据新增一列标记所属区域,之后在tmap绘图链中添加tm_facets(by = "分区列名")即可自动生成对应分面图。
  • 绘制全美范围地图时,可直接调用counties(cb = TRUE)拉取全部县级数据,无需逐州合并。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 23:45:04