Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Plot.ly:由多个下拉菜单控制的一个图形的逻辑_Python_Plotly - Fatal编程技术网

Python Plot.ly:由多个下拉菜单控制的一个图形的逻辑

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图如下所示:

在下面通过Python API编写的Plot.ly代码中,我根据下拉菜单中的选择显示了cos(x)/cos(2x)/sin(x)/sin(2x)之一。我想修改它,这样有两个下拉菜单:一个用于选择cos/sin,另一个用于选择x/2x。已经有第二个虚拟下拉菜单,它与第一个完全相同,只是为了演示

Plot.ly有能力做到这一点吗?到目前为止,我只知道通过buttons dictionary中的
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}