В конце концов я предположил, что это невозможно в чистом сюжете.В Dash все достаточно просто.
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}