Plotly choropleth 地图非常大且加载速度慢

问题描述 投票:0回答:2

我正在绘制澳大利亚各州的区域边界。

这渲染速度极其缓慢(10 分钟以上),并且根据 Juputerlab 的说法,它正在耗尽大量内存(4Gb+)。

我已将 df 过滤为单一状态,以减少要绘制的边界数量。将颜色设置为其中一列进行绘图会占用更多的时间和内存。如果我不设置颜色,那么它会在一分钟左右加载。

这是可以预料的吗?或者我可以对代码做些什么,以便它在合理的时间内渲染地图?

使用的形状文件可以在这里找到

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()

解决方案

在评论中使用 Robs 解决方案,这极大地加快了渲染速度:

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) #need to drop None value rows for the geometry to be simplified below
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()
plotly plotly-python choropleth
2个回答
4
投票

我经常发现 Mapbox 由于几何图形过于精确而显着减慢速度。刚刚采取措施简化到 1000m 的精度,然后一切都运行得很快。

import geopandas as gpd
import plotly.express as px

sa4_df = gpd.read_file("https://www.abs.gov.au/statistics/standards/australian-statistical-geography-standard-asgs-edition-3/jul2021-jun2026/access-and-downloads/digital-boundary-files/SA4_2021_AUST_SHP_GDA94.zip")
sa4_df = sa4_df[sa4_df["STE_NAME21"] == "New South Wales"]
# simplify geometry to 1000m accuracy
sa4_df["geometry"] = (
    sa4_df.to_crs(sa4_df.estimate_utm_crs()).simplify(1000).to_crs(sa4_df.crs)
)
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()

0
投票

确保您使用正确的位置 ID。如果您有重复的几何图形,请为每个几何图形创建一个唯一的 id,并将其用作

locations

的参数
© www.soinside.com 2019 - 2024. All rights reserved.