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
相关产品推荐
相关产品推荐

