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

Plotly绘制澳大利亚州边界地图加载慢、内存占用高的优化求助

问题:Plotly绘制澳大利亚区域边界渲染缓慢、内存占用过高
  • 使用Plotly绘制澳大利亚各州区域边界时,渲染耗时超10分钟,JupyterLab内存占用突破4GB
  • 已筛选数据至仅保留新南威尔士州,无颜色映射时加载耗时约1分钟,但设置颜色映射后,耗时和内存占用进一步大幅上升
  • 咨询该现象是否正常,以及可提升渲染效率的代码优化方式

使用的shapefile为澳大利亚统计局发布的SA4 2021边界文件。

原始实现代码

import geopandas as gpd
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import plotly.graph_objects as go
import plotly.express as px
import plotly.offline as pyo

og_sa4_df = gpd.read_file()
sa4_df = og_sa4_df.copy(deep = True)

sa4_df = sa4_df[sa4_df['STE_NAME21'] == 'New South Wales']
sa4_df.dropna(axis = 0, subset = 'geometry', how = 'any', inplace = True)
sa4_df.set_index('SA4_NAME21')
sa4_df = sa4_df.to_crs(epsg = 4326)
geojson = sa4_df.__geo_interface__  

fig = px.choropleth_mapbox(sa4_df,
                              geojson = sa4_df.geometry,
                              locations = sa4_df.index,
                              color = sa4_df.SA4_NAME21,
                              center={"lat": -33.865143, "lon": 151.209900},
                               mapbox_style="carto-positron", 
                               zoom=8,
                              width = 800,
                              height = 500)
    
fig.show()

优化方案及代码

核心优化点为简化几何图形:先将数据转换为UTM坐标系(适合距离计算的平面坐标系),使用simplify()方法简化边界(保留关键轮廓,减少顶点数量),再转换回原坐标系。该操作大幅减少了Plotly需要渲染的几何数据量,从而提升渲染速度、降低内存占用。

优化后的代码:

import geopandas as gpd
import pandas as pd
import plotly.express as px

og_sa4_df = gpd.read_file('/Users/kamila/Downloads/SA4_2021_AUST_SHP_GDA94/SA4_2021_AUST_GDA94.shp')
sa4_df = og_sa4_df.copy(deep = True)
geocol = sa4_df.pop('geometry')
sa4_df.insert(0, 'geometry', geocol)
sa4_df = sa4_df[sa4_df['STE_NAME21'] == 'New South Wales']
sa4_df.dropna(axis = 0, subset = 'geometry', how = 'any', inplace = True) # 移除几何为空的行,避免简化时出错
sa4_df["geometry"] = (sa4_df.to_crs(sa4_df.estimate_utm_crs()).simplify(1000).to_crs(sa4_df.crs))
sa4_df.set_index('SA4_NAME21')
sa4_df = sa4_df.to_crs(epsg = 4326)
geojson = sa4_df.__geo_interface__

fig = px.choropleth_mapbox(sa4_df,
                          geojson = sa4_df.geometry,
                          locations = sa4_df.index,
                          color = sa4_df.SA4_NAME21,
                           color_discrete_map={'Central West': 'red'},
                          center={"lat": -33.865143, "lon": 151.209900},
                           mapbox_style="carto-positron", 
                           zoom=8,
                          width = 1600,
                          height = 800)

fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:33:24