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

R语言绘制美国区间分级地图:颜色匹配与两州显示问题

美国Choropleth地图:颜色匹配修复及阿拉斯加/夏威夷添加方案

一、修复颜色不匹配问题

颜色显示与数据集十六进制代码不符的核心原因是你没有直接映射数据中的颜色值,而是使用了ggplot默认或自定义的自动色阶。解决方法是用scale_fill_identity()直接调用数据里的颜色列:

核心代码片段

假设你的数据集state_data包含state_name(州名)和hex_color(自定义十六进制颜色)字段:

library(ggplot2)
library(sf)

# 加载美国州界数据并统一命名格式
us_states <- st_as_sf(map("state", plot = FALSE, fill = TRUE))
us_states$NAME <- tolower(us_states$NAME)
state_data$state_name <- tolower(state_data$state_name)

# 合并地理数据与颜色数据
merged_data <- merge(us_states, state_data, by.x = "NAME", by.y = "state_name")

# 绘图时直接使用数据中的颜色
ggplot(merged_data) +
  geom_sf(aes(fill = hex_color), color = "white", linewidth = 0.2) +
  scale_fill_identity(guide = "legend", name = "Color Groups") + # 可选保留图例
  theme_minimal()

这样每个州会直接渲染你指定的十六进制颜色,比如亚利桑那州会正确显示#FDAE61。

二、添加并调整阿拉斯加和夏威夷

默认州界数据包含这两个州,但位置会破坏地图布局。需要单独缩放并平移它们:

完整实现代码

library(ggplot2)
library(sf)
library(dplyr)
library(tigris)

# 获取包含阿拉斯加、夏威夷的美国州界数据
us_states <- states(cb = TRUE) %>%
  filter(STUSPS != "PR") # 移除波多黎各(可选)

# 处理阿拉斯加:缩放+平移到本土右下角
alaska <- us_states %>% filter(NAME == "Alaska") %>%
  st_transform(crs = 3338) %>% # 切换到阿拉斯加专属投影
  st_scale_factor(0.3) %>% # 缩放至原大小的30%
  st_translate(x = -2000000, y = -2500000) %>% # 平移位置
  st_transform(crs = 4326) # 转回WGS84投影

# 处理夏威夷:缩放+平移
hawaii <- us_states %>% filter(NAME == "Hawaii") %>%
  st_transform(crs = 3338) %>%
  st_scale_factor(0.5) %>% # 缩放至原大小的50%
  st_translate(x = 1500000, y = -1200000) %>%
  st_transform(crs = 4326)

# 合并调整后的州与本土州
lower_48 <- us_states %>% filter(!NAME %in% c("Alaska", "Hawaii"))
us_states_adj <- bind_rows(lower_48, alaska, hawaii)

# 合并颜色数据(确保州名字段匹配)
us_states_adj <- merge(us_states_adj, state_data, by.x = "NAME", by.y = "state_name")

# 绘制最终地图
ggplot(us_states_adj) +
  geom_sf(aes(fill = hex_color), color = "white", linewidth = 0.2) +
  scale_fill_identity(guide = "legend") +
  theme_minimal() +
  theme(axis.text = element_blank(), axis.title = element_blank())

注意事项

  • 确保state_data中的州名与sf数据的NAME字段完全匹配(比如大小写、全称一致)
  • 可根据需求调整st_scale_factor和st_translate的参数,优化阿拉斯加/夏威夷的位置和大小

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:53:08