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

使用Matplotlib绘制国家GeoDataFrame时,如何正确对比国家面积?

解决Matplotlib子图中地理区域面积失真问题

问题背景

绘制加纳、肯尼亚、津巴布韦三个国家的子图时,出现面积失真:肯尼亚实际面积远大于另外两国,但子图中显示大小相近。尝试修改CRS为区域坐标系、设置set_aspect('equal')后问题仍未解决。

核心原因

默认的WGS84(EPSG:4326)经纬度投影不是等面积投影,直接绘制会导致面积比例失真;同时子图未统一采用等面积投影,且坐标轴比例未正确约束。

解决方案

采用等面积投影转换地理数据,同时确保子图坐标轴比例一致、自动适配边界范围。

修改后的代码

import geopandas as gpd
import matplotlib.pyplot as plt

strCountries = ["ghana", "kenya", "zimbabwe"]
admin1Countries = []
# 选用非洲统一等面积投影(ESRI:102022),保证跨国家面积比例准确
target_crs = "ESRI:102022"

for country in strCountries:
    regions = gpd.read_file(f"../data/admin1{country}.geojson")
    # 将数据转换到等面积投影坐标系
    regions = regions.to_crs(target_crs)
    admin1Countries.append(regions)

# 单图验证真实面积比例
fig, ax = plt.subplots()
for regions in admin1Countries:
    regions.plot(ax=ax)
ax.set_aspect('equal')
plt.show()

# 子图绘制,保证面积比例正确
fig, axs = plt.subplots(1, 3, figsize=(15, 5))
for i, regions in enumerate(admin1Countries):
    regions.plot(ax=axs[i])
    axs[i].set_title(strCountries[i].capitalize())
    # 强制坐标轴等比例,避免图形拉伸
    axs[i].set_aspect('equal')
    axs[i].set_axis_off()
    # 自动适配国家边界,优化显示范围
    axs[i].autoscale()
plt.tight_layout()
plt.show()

关键说明

  1. 等面积投影的选择:
    • 跨国家场景推荐用非洲统一等面积投影ESRI:102022,保证不同国家间面积比例准确;
    • 若需更精准的单国家投影,可替换为各国专属等面积CRS:
      • 加纳:EPSG:2136
      • 肯尼亚:EPSG:21037
      • 津巴布韦:EPSG:20935
  2. set_aspect('equal'):必须设置,确保子图的x/y轴比例一致,避免图形被拉伸或压缩;
  3. autoscale():自动适配每个国家的边界范围,无需手动设置坐标轴范围,保证国家图形在子图中合理显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 13:57:28