具有依赖交互的Plotly按钮(Python)
我正在尝试构建一个具有大量记录道和多组按钮的Plotly 3D散点图,以确定记录道的哪一个子集是可见的。我希望按钮的交互方式取决于其他按钮的状态。例如,假设按钮1和按钮2属于一个按钮栏,按钮A和按钮B属于另一个按钮栏,并且一次只能按下每个按钮栏中的一个按钮。我希望在按钮1处于活动状态时按下按钮A,以显示与在按钮2处于活动状态时按下按钮A不同的记录道子集 我在下面附上了一个玩具的例子。它有一个由三条轨迹和两条按钮组成的数据集,但每个按钮的行为目前独立于其他按钮。我希望按钮以一种依赖的方式运行,例如具有依赖交互的Plotly按钮(Python),python,plotly,Python,Plotly,我正在尝试构建一个具有大量记录道和多组按钮的Plotly 3D散点图,以确定记录道的哪一个子集是可见的。我希望按钮的交互方式取决于其他按钮的状态。例如,假设按钮1和按钮2属于一个按钮栏,按钮A和按钮B属于另一个按钮栏,并且一次只能按下每个按钮栏中的一个按钮。我希望在按钮1处于活动状态时按下按钮A,以显示与在按钮2处于活动状态时按下按钮A不同的记录道子集 我在下面附上了一个玩具的例子。它有一个由三条轨迹和两条按钮组成的数据集,但每个按钮的行为目前独立于其他按钮。我希望按钮以一种依赖的方式运行,例如
- 1和A按下:显示跟踪1
- 按下1和B:显示记录道1和2
- 2和A按下:显示跟踪3
- 按下2和B:显示所有轨迹
我在以下教程中找到了这个问题的答案:。我用单选项而不是按钮构建了一个Dash应用程序,结果非常好
from plotly.offline import plot
import plotly.plotly as py
import plotly.graph_objs as go
import numpy as np
x, y, z = np.random.multivariate_normal(np.array([0,0,0]), np.eye(3), 20).transpose()
trace1 = go.Scatter3d(
x=x,
y=y,
z=z,
mode='markers',
marker=dict(
color='rgb(124, 252, 0)',
size=12,
opacity=0.8
)
)
x2, y2, z2 = np.random.multivariate_normal(np.array([0,0,0]), np.eye(3), 20).transpose()
trace2 = go.Scatter3d(
x=x2,
y=y2,
z=z2,
mode='markers',
marker=dict(
color='rgb(30, 144, 255)',
size=12,
opacity=0.8
)
)
x3, y3, z3 = np.random.multivariate_normal(np.array([0,0,0]), np.eye(3), 20).transpose()
trace3 = go.Scatter3d(
x=x3,
y=y3,
z=z3,
mode='markers',
marker=dict(
color='rgb(220, 20, 60)',
size=12,
opacity=0.8
)
)
data = [trace1, trace2, trace3]
layout = go.Layout(
margin=dict(
l=0,
r=0,
b=0,
t=0
)
)
button_layer_1_height = 1.12
button_layer_2_height = 1.065
updatemenus=list([
dict(
buttons=list([
dict(
args=[{'visible': [True, False, True]}],
label='Button 1',
method='restyle'
),
dict(
args=[{'visible': [True, True, False]}],
label='Button 2',
method='restyle'
),
]),
direction = 'left',
pad = {'r': 10, 't': 10},
showactive = True,
type = 'buttons',
x = 0.1,
xanchor = 'left',
y = button_layer_1_height,
yanchor = 'top'
),
dict(
buttons=list([
dict(
args=[{'visible': [False, True, False]}],
label='Button A',
method='restyle'
),
dict(
args=['visible', [True, False, False]],
label='Button B',
method='restyle'
)
]),
direction = 'left',
pad = {'r': 10, 't': 10},
showactive = True,
type = 'buttons',
x = 0.1,
xanchor = 'left',
y = button_layer_2_height,
yanchor = 'top'
),
])
layout['updatemenus']=updatemenus
fig = go.Figure(data=data, layout=layout)
plot(fig, filename='localtest.html')