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

使用ggplot2与map_data('state')绘制美国州地图变形的解决方法

美国地图绘制比例错误修正方案

问题描述

我尝试使用ggplot2和usa <- map_data('state')绘制美国各州地图,虽然用coord_fixed()固定了宽高比,但地图仍呈现过宽过扁的错误形态,该如何修正?

当前代码:

ggplot(data = hiv_data, mapping = aes(x= long, y= lat, group = group, fill = delta)) +
  geom_polygon(color="blue") + 
  scale_fill_gradient2(
    limits=range(5,-175),
    low = "blue",
    high = "white"
  ) +
  theme_classic() +
  labs(
    x = "",
    y = "", 
    title = "Change in HIV per 100000 from 2008 to 2020"
  ) +
  theme( 
    axis.text.x = element_blank(),
    axis.text.y=element_blank(),
    axis.line = element_blank(),
    axis.ticks = element_blank()
  ) +
  coord_fixed()

错误原因

map_data('state')返回的是经纬度坐标,coord_fixed()默认使用1:1的宽高比,但地球是球体,同一经度差的实际距离会随纬度变化,美国本土的纬度范围下,经度方向的距离比纬度方向短,直接用默认比例会导致地图拉伸变形。

修正方案

方案1:使用专业地图投影(推荐)

用coord_map()替代coord_fixed(),它支持多种地图投影,其中**阿尔伯斯投影(albers)**非常适合美国本土区域,能自动校正比例:

ggplot(data = hiv_data, mapping = aes(x= long, y= lat, group = group, fill = delta)) +
  geom_polygon(color="blue") + 
  scale_fill_gradient2(
    limits = c(-175, 5),  # 替换range(5,-175),直接写范围更清晰
    low = "blue",
    high = "white"
  ) +
  theme_classic() +
  labs(
    x = "",
    y = "", 
    title = "2008至2020年每10万人HIV感染率变化"
  ) +
  theme( 
    axis.text.x = element_blank(),
    axis.text.y = element_blank(),
    axis.line = element_blank(),
    axis.ticks = element_blank()
  ) +
  coord_map(projection = "albers", lat0 = 39, lat1 = 45)  # 设置阿尔伯斯投影的标准纬度

方案2:手动调整宽高比

如果坚持用coord_fixed(),可以根据美国本土的经纬度范围手动设置ratio参数,通常设置为1.3左右能得到比较自然的比例:

ggplot(data = hiv_data, mapping = aes(x= long, y= lat, group = group, fill = delta)) +
  geom_polygon(color="blue") + 
  scale_fill_gradient2(
    limits = c(-175, 5),
    low = "blue",
    high = "white"
  ) +
  theme_classic() +
  labs(
    x = "",
    y = "", 
    title = "2008至2020年每10万人HIV感染率变化"
  ) +
  theme( 
    axis.text.x = element_blank(),
    axis.text.y = element_blank(),
    axis.line = element_blank(),
    axis.ticks = element_blank()
  ) +
  coord_fixed(ratio = 1.3)  # 手动调整宽高比

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:12:32