Plotly Choropleth地图在Jupyter中加载成功,但Dash浏览器无法加载



我已经能够成功地使用plotly和geopandas创建自定义shapefile Choropleth地图。它在我的Jupyter窗口中成功加载。下图是在木星上运行时的地图。

在Jupyter中成功渲染地图

这是用来呈现上面地图的代码:

data = go.Choroplethmapbox(
geojson = gdf_json,
locations = df.index.astype(str),
z = df['2016']['Total'],
text = df.index.astype(str),
colorbar=dict(thickness=20,ticklen=3,tickformat=',.2r',outlinewidth=0),
marker_line_width=0.5,
marker_opacity=0.4,
colorscale='gnbu',
zmin=zmin,
zmax=zmax,
hovertemplate = "<b>%{text}</b><br>" +
"%{z:,.4r}<br>" +
"<extra></extra>")
#mapbox geographic map layout
layout = go.Layout(
title='Expenditure, 2020',
autosize=True,
#hovermode='closest',
#showlegend=True,
height=600,
margin=dict(l=0, r=0, t=40, b=0),

mapbox = dict(
domain = {'x': [0, 1],'y': [0, 1]}, 
center = dict(lat=-27.628296146695863, lon=152.74025612708698),
accesstoken = MAPBOX_ACCESSTOKEN, 
#pitch=0,
zoom=10,
style='light')
)
fig = go.Figure(data=data, layout=layout)
fig.show()

但是,当我试图将地图加载到Dash中时,它返回为空图。(注意,在此过程中我取消了fig.show()行代码)。

app.layout = html.Div([
dcc.Graph(id = 'plot', figure = fig)
])
if __name__ == '__main__':
app.run_server()

Dash地图不成功

What I have try

为了缩小潜在的问题,我尝试加载其他元素,如下拉菜单、单选按钮和范围滑块。这些加载成功,只是地图本身没有。我还使用了正确的公共Mapbox API令牌,因为我之前已经加载了一个Scattermapbox图(创建了一个气泡图),这在Dash上已经成功了。

可能的原因

显然,首先要考虑的是我的代码中是否有一个非常小的语法错误。

然而,我也想知道是否有什么问题与geojson的加载?即使它在Jupyter中加载成功,也许在将其加载到Dash时使用的方法略有不同?

将我的geoandas多边形转换为geojson:

  1. 我把它转换成合适的CRS——>gdf.to_crs(epsg=4326)
  2. 设置索引为我唯一的id——>gdf.set_index(id)
  3. 应用此函数——>gdf_json =gdf.__geo_interface__

geojson文件示例

如果可能的话,我希望得到一些帮助。谢谢你!

我正在处理一个非常类似的问题,当我从jupyter转换为dash时,我不记得必须更改geojson的过程。但不要否认这种可能性。事实上,它没有从geojson中产生任何错误,这可能表明您在构建布局时出现了错误。所以你应该先做两件事。

  1. 运行调试器(如果你还没有),因为这将拾取错误,不会移植到您的终端

app.run_server(debug=True)

  1. 将您的地图渲染代码放入函数

    def build_map():

    return fig #after building the map figure
    

    app.layout = html.Div[(dcc.Graph(figure = build_map())]

我在构建较大的地图时遇到了一个错误,会超时。

这里有很多事情可能出错,所以排除过程是关键。请在下面发表评论,我会继续努力帮助你!

最新更新