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

在R中按邮政编码绘制美国地图点:调整阿拉斯加夏威夷嵌入位置

解决方案

1. 对齐阿拉斯加、夏威夷的点与地图位置

fifty_states数据集里的阿拉斯加(AK)和夏威夷(HI)已经做了缩放移位处理,所以你的邮编点数据也得同步转换坐标,才能让点落在对应的嵌入区域:

先写个坐标转换函数,对AK和HI的经纬度做缩放和位移:

transform_ak_hi <- function(df) {
  df %>%
    mutate(
      lng = case_when(
        state == "AK" ~ lng * 0.3 + 180,  # AK缩放0.3倍,右移到本土右下角
        state == "HI" ~ lng + 50,         # HI右移
        TRUE ~ lng
      ),
      lat = case_when(
        state == "AK" ~ lat * 0.3 + 20,   # AK下移
        state == "HI" ~ lat + 10,         # HI上移
        TRUE ~ lat
      )
    )
}

然后把这个函数应用到你的数据上再绘图,同时加上coord_map()保证投影匹配:

loc_full2 %>% 
  filter(cns2 != 0) %>%
  transform_ak_hi() %>%
  ggplot() + 
  geom_polygon(data = fifty_states, aes(x = long, y = lat, group = group), color = "black", fill = "white") + 
  geom_point(aes(x = lng, y = lat, size = cns2), alpha = .3, col = "grey10") + 
  # 处理图例和整数刻度的部分
  scale_size_continuous(
    name = "# CNM",
    range = c(2, 10),
    # 强制生成整数刻度
    breaks = function(x) seq(floor(x[1]), ceiling(x[2]), by = 1),
    labels = function(x) as.integer(x)
  ) +
  coord_map() +
  theme_void()

如果AK/HI的位置还是不对,微调transform_ak_hi里的缩放倍数和位移值就行,比如调整AK的+180改成+175,或者缩放倍数改成0.25,直到和目标图对齐。

2. 把图例刻度改成整数

上面的scale_size_continuous里已经包含了处理逻辑:

  • breaks参数根据数据的最小/最大值生成连续的整数断点
  • labels把断点转为整数格式,避免小数

如果你的cns2数值范围固定,也可以直接写死断点,比如breaks = c(1,3,5,7,9),更精准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:22:52