Python Plot.ly:由多个下拉菜单控制的一个图形的逻辑
在下面通过Python API编写的Plot.ly代码中,我根据下拉菜单中的选择显示了cos(x)/cos(2x)/sin(x)/sin(2x)之一。我想修改它,这样有两个下拉菜单:一个用于选择cos/sin,另一个用于选择x/2x。已经有第二个虚拟下拉菜单,它与第一个完全相同,只是为了演示 Plot.ly有能力做到这一点吗?到目前为止,我只知道通过buttons dictionary中的Python Plot.ly:由多个下拉菜单控制的一个图形的逻辑,python,plotly,Python,Plotly,在下面通过Python API编写的Plot.ly代码中,我根据下拉菜单中的选择显示了cos(x)/cos(2x)/sin(x)/sin(2x)之一。我想修改它,这样有两个下拉菜单:一个用于选择cos/sin,另一个用于选择x/2x。已经有第二个虚拟下拉菜单,它与第一个完全相同,只是为了演示 Plot.ly有能力做到这一点吗?到目前为止,我只知道通过buttons dictionary中的visible标记编辑可见内容,该标记采用静态列表,因此我不确定表示逻辑是否足够 Plot.ly图如下所示:
visible
标记编辑可见内容,该标记采用静态列表,因此我不确定表示逻辑是否足够
Plot.ly图如下所示:
代码(可在Jupyter笔记本中运行):
最终,我认为这完全是不可能的。这在短跑中很简单
app = dash.Dash()
func_map = {'cos': np.cos, 'sin': np.sin, None: np.cos}
app.layout = html.Div([
html.Div(
[
dcc.Dropdown(
id='function-select',
options=[{'label': 'cos', 'value': 'cos'}, {'label': 'sin', 'value': 'sin'}],
value='cos'
)
],
style={'width': '20%', 'display': 'inline-block'}
),
html.Div(
[
dcc.Dropdown(
id='arg-select',
options=[{'label': 'x', 'value': 1}, {'label': '2x', 'value': 2}],
value=1
)
],
style={'width': '20%', 'display': 'inline-block'}
),
dcc.Graph(id='sinusoid-graph')
])
@app.callback(
dash.dependencies.Output('sinusoid-graph', 'figure'),
[
dash.dependencies.Input('function-select', 'value'),
dash.dependencies.Input('arg-select', 'value')
]
)
def update_graph(func_name, omega):
func = func_map[func_name]
xx = np.linspace(0, 10, 100)
yy = func(omega*xx)
data = [go.Scatter(x = xx, y = yy)]
layout = go.Layout(
title = '{}({}x)'.format(func_name, omega),
hovermode = 'closest'
)
return {'data': data, 'layout': layout}
app = dash.Dash()
func_map = {'cos': np.cos, 'sin': np.sin, None: np.cos}
app.layout = html.Div([
html.Div(
[
dcc.Dropdown(
id='function-select',
options=[{'label': 'cos', 'value': 'cos'}, {'label': 'sin', 'value': 'sin'}],
value='cos'
)
],
style={'width': '20%', 'display': 'inline-block'}
),
html.Div(
[
dcc.Dropdown(
id='arg-select',
options=[{'label': 'x', 'value': 1}, {'label': '2x', 'value': 2}],
value=1
)
],
style={'width': '20%', 'display': 'inline-block'}
),
dcc.Graph(id='sinusoid-graph')
])
@app.callback(
dash.dependencies.Output('sinusoid-graph', 'figure'),
[
dash.dependencies.Input('function-select', 'value'),
dash.dependencies.Input('arg-select', 'value')
]
)
def update_graph(func_name, omega):
func = func_map[func_name]
xx = np.linspace(0, 10, 100)
yy = func(omega*xx)
data = [go.Scatter(x = xx, y = yy)]
layout = go.Layout(
title = '{}({}x)'.format(func_name, omega),
hovermode = 'closest'
)
return {'data': data, 'layout': layout}