我正在尝试在Dash中使用Choroplethmapbox
来构建地图,但是我无法在其中进行绘图。
我使用其他工具测试了geojson,在该工具中,地图绘制正确,但没有使用Choroplethmapbox
。
关于我在做什么错的任何想法吗?
谢谢
GeoJson:
https://gist.github.com/Tlaloc-Es/5c82834e5e4a9019a91123cb11f598c0
Python Dash代码:
import json
with open('mexico.geojson') as f:
counties = json.load(f)
fig = go.Figure(go.Choroplethmapbox(
geojson=counties,
locations=df['COV_'],
z=df['Enero'],
colorscale="Viridis", zmin=0, zmax=df['Enero'].max(),
marker_opacity=0.5, marker_line_width=0))
fig.update_layout(mapbox_style="carto-positron",
mapbox_zoom=3, mapbox_center = {"lat": 37.0902, "lon": -95.7129})
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
答案 0 :(得分:3)
看起来像您缺少底部的 fig.show(),而顶部却直接导入了plotly.graph_objects 。下面的代码将打开一个地图,但是需要为Choropleth值提供数据。您的代码示例中有df,但没有包含csv。如果需要我们代码中的df,请导入熊猫,然后从csv创建一个名为df的数据框。这是一个可以帮助您的链接。 Pandas dataframes
import json
import plotly.graph_objects as go
with open(r'{insert file path here}.geojson') as f:
counties = json.load(f)
fig = go.Figure(go.Choroplethmapbox(
geojson=counties,
colorscale="Viridis", zmin=0, zmax=100,
marker_opacity=0.5, marker_line_width=0))
fig.update_layout(mapbox_style="carto-positron",
mapbox_zoom=3, mapbox_center = {"lat": 37.0902, "lon": -95.7129})
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.show()
以下是在您的json中使用熊猫的示例。here
from urllib.request import urlopen
import json
with urlopen('https://raw.githubusercontent.com/plotly/datasets/master/geojson-counties-fips.json') as response:
counties = json.load(response)
import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/fips-unemp-16.csv",
dtype={"fips": str})
import plotly.express as px
fig = px.choropleth(df, geojson=counties, locations='fips', color='unemp',
color_continuous_scale="Viridis",
range_color=(0, 12),
scope="usa",
labels={'unemp':'unemployment rate'}
)
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.show()
答案 1 :(得分:2)
我需要添加一个带有以下代码的ID:
我使用了此页的代码:https://community.plot.ly/t/plot-a-shapefile-shp-in-a-choropleth-chart/27850
答案 2 :(得分:1)
我必须解决一个类似的问题,这是我应用于您的问题的解决方案(尽管使用 px.choropleth_mapbox
而不是我发现对等值线感到困惑的 graph_objects)。
app.layout = ...
),而您可能没有它就可以提供服务,并且只按照建议使用 fig.show()
,显式节拍隐式。因此,最好创建一个布局部分。无论如何,希望我的解决方案可以作为您工作的开始。我添加了单选按钮,以便您可以选择用于颜色的数据列。
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output, State
import plotly.express as px
import geopandas as gpd
print('Loading data...')
gdf = gpd.read_file('https://gist.githubusercontent.com/Tlaloc-Es/5c82834e5e4a9019a91123cb11f598c0/raw/709ce9126861ef7a7c7cc4afd6216a6750d4bbe1/mexico.geojson')
gdf = gdf.to_crs(epsg=4326)
print('Done!')
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
app.layout = html.Div([
html.Div([
dcc.RadioItems(
id='radio-color_on',
options=[{'label': i, 'value': i} for i in ['AREA','PERIMETER']],
value='AREA',
labelStyle={'display': 'inline-block'}
),
],style={'width': '40%', 'display': 'inline-block',}),
html.Div([], style={'width':'100%'}),
html.Div([
dcc.Graph(id="fig")
],style={'width': '100%', 'display': 'inline-block', 'padding': '0 10',},),
])
@app.callback(
Output("fig", "figure"),
[Input("radio-color_on", "value")])
def draw_choropleth(color_on):
fig = px.choropleth_mapbox(gdf,
geojson=gdf.geometry,
locations=gdf.index,
color=color_on,
color_continuous_scale="Viridis",
#range_color=(0, 12),
mapbox_style="carto-positron",
zoom=4,
center = {"lat":gdf.centroid.y.mean(), "lon":gdf.centroid.x.mean()},
opacity=0.5,
)
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0},
height=700,
)
return fig
if __name__ == '__main__':
app.run_server(debug=True)
将此代码保存到文件“myapp.py”并在终端中运行它作为 python myapp.py
启动服务的开发,启动网络浏览器,导航到它使用的 url(它写在终端,通常是 172.0.0.1:8050)给你这个:
我正在从默认的 anaconda 频道运行这些版本。
附注。我实际上使用这些数据来询问有关 dash choropleth mapbox 选择行为 (Selection behavior in plotly-dash Choropleth mapbox plot) 的问题。谢谢!
答案 3 :(得分:0)
我有类似的问题。使用show方法,它可以正常工作,有时也可以使用破折号(仅使用回调)。出现问题的原因是破折号的真正旧版本,是通过anaconda的默认通道安装的(仅一个版本1.4.1)。通过conda-forge频道安装较新版本(在我的情况下为1.13.4)后,是否可行。
conda install -c conda-forge dash dash-core-components \
dash-html-components dash-renderer dash-table