Python 绘制破折号下拉菜单

Python 绘制破折号下拉菜单,python,plotly,plotly-dash,Python,Plotly,Plotly Dash,我想添加一个下拉菜单,只显示一个图形。我的意思是,如果我选择fig,仪表板必须只显示fig,如果我选择fig2,仪表板必须显示fig 2。可能吗? 我的代码就是一个例子,我有500多个无花果 import dash import dash_core_components as dcc import dash_html_components as html import plotly.graph_objects as go # or plotly.express as px fig = go.F

我想添加一个下拉菜单,只显示一个图形。我的意思是,如果我选择fig,仪表板必须只显示fig,如果我选择fig2,仪表板必须显示fig 2。可能吗? 我的代码就是一个例子,我有500多个无花果

import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objects as go # or plotly.express as px

fig = go.Figure()
fig2 = go.Figure()
fig.add_trace(go.Scatter(y=[4, 2, 1], mode="lines"))
fig2.add_trace(go.Bar(y=[2, 1, 3]))

figs = [fig, fig2]
div = []
for item in figs:
    div.append(dcc.Graph(figure=item))

app = dash.Dash()
app.layout = html.Div(div)
"""
add a dropdown to show only one fig
"""


app.run_server(debug=True, use_reloader=False)
是的,这是可能的

首先,您需要创建包含地物名称/文件名或所需标识符的下拉列表,只需保留选项参数的{'label':x,'value':x}结构即可。标签是您将在下拉列表中看到的,值将传递给回调函数。下面

fig_names = ['fig1', 'fig2']
fig_dropdown = html.Div([
    dcc.Dropdown(
        id='fig_dropdown',
        options=[{'label': x, 'value': x} for x in fig_names],
        value=None
    )])
接下来,您需要一个带有id的空白div,用于显示绘图:

fig_plot = html.Div(id='fig_plot')
现在创建一个回调。当id为='fig_下拉列表'的输入发生更改时,value参数将传递给update_输出函数。此函数的输出将传递给id='fig_plot'div的子参数

name_to_figurefig_name函数根据下拉列表的fig_name值返回包含您的图形的dcc.Graph对象

完整示例:

import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objects as go # or plotly.express as px


app = dash.Dash()

fig_names = ['fig1', 'fig2']
fig_dropdown = html.Div([
    dcc.Dropdown(
        id='fig_dropdown',
        options=[{'label': x, 'value': x} for x in fig_names],
        value=None
    )])
fig_plot = html.Div(id='fig_plot')
app.layout = html.Div([fig_dropdown, fig_plot])

@app.callback(
dash.dependencies.Output('fig_plot', 'children'),
[dash.dependencies.Input('fig_dropdown', 'value')])
def update_output(fig_name):
    return name_to_figure(fig_name)

def name_to_figure(fig_name):
    figure = go.Figure()
    if fig_name == 'fig1':
        figure.add_trace(go.Scatter(y=[4, 2, 1]))
    elif fig_name == 'fig2': 
        figure.add_trace(go.Bar(y=[2, 1, 3]))
    return dcc.Graph(figure=figure)

app.run_server(debug=True, use_reloader=False)

如果在下拉框中有这么多fig可供选择,则可能需要对代码进行以下更改以实现:

@app.callback(Output('fig_plot', 'figure'), [Input('fig_dropdown', 'value')])
def cb(plot_type):
    plot_type = plot_type if plot_type else 'fig1'
    df_year = head_db.copy()
    if plot_type:
        return px.bar(df_year, x='Week #', y=str(plot_type), color='Name')

我认为这是另一个问题——可能是数据处理问题,而不是短跑问题。你从哪里得到这些数字/数据?必须有一种方法可以识别您的数字-例如,将其用作名称。你说的一直都是什么意思?
@app.callback(Output('fig_plot', 'figure'), [Input('fig_dropdown', 'value')])
def cb(plot_type):
    plot_type = plot_type if plot_type else 'fig1'
    df_year = head_db.copy()
    if plot_type:
        return px.bar(df_year, x='Week #', y=str(plot_type), color='Name')