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

使用Plotly绘制全球一级行政区Choropleth地图内存溢出问题求助

解决GADM全球一级行政区Choroplethmapbox内存崩溃问题

核心原因

内存崩溃的本质不是MultiPolygon类型,而是GADM数据集的高精度多边形包含大量顶点,直接渲染会耗尽内存。explode()拆分MultiPolygon反而会增加数据行数,进一步加剧内存压力,完全没必要。

最优解决方案

1. 几何图形简化(最有效)

用Geopandas的simplify()方法减少多边形顶点数,同时保留拓扑结构,平衡精度与内存占用:

import geopandas as gpd
import plotly.express as px

# 仅加载必要列(避免冗余数据占用内存)
gdf = gpd.read_file("gadm41_level1.gpkg", columns=["NAME_1", "target_value", "geometry"])

# 简化几何:tolerance为容差(单位:度),值越大顶点越少,按需调整
# preserve_topology=True保证简化后图形无自相交等拓扑错误
gdf["geometry"] = gdf["geometry"].simplify(tolerance=0.01, preserve_topology=True)

# 绘制地图
fig = px.choropleth_mapbox(
    gdf,
    geojson=gdf.geometry,
    locations=gdf.index,
    color="target_value",
    mapbox_style="carto-positron",
    zoom=1,
    center={"lat": 0, "lon": 0},
    hover_data=["NAME_1"]
)
fig.show()
  • 建议从0.01开始测试容差,若精度不足可调小(如0.005),若内存仍有压力则调大(如0.02)。

2. 按需分块渲染(可选)

如果简化后内存压力仍大,可按大洲/区域分块加载渲染:

# 筛选亚洲区域数据
asia_gdf = gdf[gdf["CONTINENT"] == "Asia"]
# 简化后单独渲染亚洲区域
fig = px.choropleth_mapbox(
    asia_gdf,
    geojson=asia_gdf.geometry,
    locations=asia_gdf.index,
    color="target_value",
    mapbox_style="carto-positron",
    zoom=3,
    center={"lat": 30, "lon": 100}
)
fig.show()
  • 若需要全球视图,可通过Plotly的add_trace()方法分批添加不同区域的图层。

3. 优化内存使用细节

  • 读取数据时只加载必需的属性列,避免加载GADM自带的大量冗余字段;
  • 确保着色用的数值列是int或float类型,不要用字符串,减少内存开销;
  • 若使用Jupyter Notebook,可在绘图前运行gc.collect()手动释放内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:18:28