Python - /当我更改 Multi = True/Dash Components 和 Plotly Graphs 时,图表和下拉菜单之间的连接丢失
Python - /Connections lost between graph and dropdown when i change Multi = True/Dash Components and Plotly Graphs
希望你一切都好!。我是 Python、dash 和 Plotly 的新手,我很难理解为什么我无法将下拉栏与其连接的图表同步。
当 Multi 默认时,图形网页工作正常,但是当我更改选项时它停止工作。
如果您能够更正代码并提供一些说明为什么我的代码不起作用,我们将不胜感激。
一些叙述:在我上传的 excel sheet 中有关于所有州的信息,但是我只对这个例子中的 5 个州感兴趣,因此字典包含 5 个州
dff = dff[dff["状态"] == option_selected]
此处的变量状态存在于excelsheet中,正在导入数据框中。
我也在使用 covidtracking.com
的 this data set
提前致谢!
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from dash import Dash, dcc, html, Input, Output
app = Dash(__name__)
# -- Import and clean data (importing csv into pandas)
df = pd.read_csv("all-states-history.csv")
# ------------------------------------------------------------------------------
# App layout
app.layout = html.Div([
html.H1("CV deaths by state", style={'text-align': 'center'}),
dcc.Dropdown(id="slct_year",
options=[
{'label':'AZ','value': 'AZ'},
{'label':'CA','value': 'CA'},
{'label':'NY','value': 'NY'},
{'label':'FL','value': 'FL'},
{'label':'MA','value': 'MA'}],
multi=True,
#value=2015,
style={'width': "40%"}
),
html.Div(id='output_container', children=[]),
html.Br(),
dcc.Graph(id='my_map', figure={})
])
# ------------------------------------------------------------------------------
# Connect the Plotly graphs with Dash Components
@app.callback(
[Output(component_id='output_container', component_property='children'),
Output(component_id='my_map', component_property='figure')],
[Input(component_id='slct_year', component_property='value')]
)
def update_graph(option_selected):
print(option_selected)
print(type(option_selected))
container = "The state chosen by user was: {}".format(option_selected)
dff = df.copy()
dff = dff[dff["state"] == option_selected]
# Plotly Express
fig = px.choropleth(
data_frame=dff,
locationmode='USA-states',
locations='state',
scope="usa",
color='state',
hover_data=['state'],
color_continuous_scale=px.colors.sequential.YlOrRd,
template='plotly_dark'
)
return (container, fig)
# ------------------------------------------------------------------------------
if __name__ == '__main__':
# For Development only, otherwise use gunicorn or uwsgi to launch, e.g.
# gunicorn -b 0.0.0.0:8050 index:app.server
app.run_server(
port=8050,
host='0.0.0.0'
)
我认为您会 运行 遇到两个问题:第一个是一旦用户 select 来自下拉列表,option_selected
的类型将是 'list'
和根据元素是否在列表中切片 DataFrame 的语法是使用 .isin.
另一个问题是,当 dash 应用程序初始化时,option_selected
将是 NoneType
,因为用户尚未从下拉菜单中 select。您可以包含一个条件来检查:
if option_selected is not None:
dff = dff[dff["state"].isin(option_selected)]
然后是 dash 应用程序 运行s,您可以 select 5 个州。
希望你一切都好!。我是 Python、dash 和 Plotly 的新手,我很难理解为什么我无法将下拉栏与其连接的图表同步。
当 Multi 默认时,图形网页工作正常,但是当我更改选项时它停止工作。
如果您能够更正代码并提供一些说明为什么我的代码不起作用,我们将不胜感激。
一些叙述:在我上传的 excel sheet 中有关于所有州的信息,但是我只对这个例子中的 5 个州感兴趣,因此字典包含 5 个州
dff = dff[dff["状态"] == option_selected]
此处的变量状态存在于excelsheet中,正在导入数据框中。
我也在使用 covidtracking.com
的 this data set提前致谢!
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from dash import Dash, dcc, html, Input, Output
app = Dash(__name__)
# -- Import and clean data (importing csv into pandas)
df = pd.read_csv("all-states-history.csv")
# ------------------------------------------------------------------------------
# App layout
app.layout = html.Div([
html.H1("CV deaths by state", style={'text-align': 'center'}),
dcc.Dropdown(id="slct_year",
options=[
{'label':'AZ','value': 'AZ'},
{'label':'CA','value': 'CA'},
{'label':'NY','value': 'NY'},
{'label':'FL','value': 'FL'},
{'label':'MA','value': 'MA'}],
multi=True,
#value=2015,
style={'width': "40%"}
),
html.Div(id='output_container', children=[]),
html.Br(),
dcc.Graph(id='my_map', figure={})
])
# ------------------------------------------------------------------------------
# Connect the Plotly graphs with Dash Components
@app.callback(
[Output(component_id='output_container', component_property='children'),
Output(component_id='my_map', component_property='figure')],
[Input(component_id='slct_year', component_property='value')]
)
def update_graph(option_selected):
print(option_selected)
print(type(option_selected))
container = "The state chosen by user was: {}".format(option_selected)
dff = df.copy()
dff = dff[dff["state"] == option_selected]
# Plotly Express
fig = px.choropleth(
data_frame=dff,
locationmode='USA-states',
locations='state',
scope="usa",
color='state',
hover_data=['state'],
color_continuous_scale=px.colors.sequential.YlOrRd,
template='plotly_dark'
)
return (container, fig)
# ------------------------------------------------------------------------------
if __name__ == '__main__':
# For Development only, otherwise use gunicorn or uwsgi to launch, e.g.
# gunicorn -b 0.0.0.0:8050 index:app.server
app.run_server(
port=8050,
host='0.0.0.0'
)
我认为您会 运行 遇到两个问题:第一个是一旦用户 select 来自下拉列表,option_selected
的类型将是 'list'
和根据元素是否在列表中切片 DataFrame 的语法是使用 .isin.
另一个问题是,当 dash 应用程序初始化时,option_selected
将是 NoneType
,因为用户尚未从下拉菜单中 select。您可以包含一个条件来检查:
if option_selected is not None:
dff = dff[dff["state"].isin(option_selected)]
然后是 dash 应用程序 运行s,您可以 select 5 个州。