如何将按钮与滑块的当前索引结合起来

问题描述

我想结合滑块和按钮。假设我们有 3 个不同深度的表面。当我滑过不同的深度时,我想用按钮打开/关闭该特定深度的附加轨迹。我在下面创建了示例以更好地解释它。

import plotly.graph_objs as go

z1 = [
[4,4,4],[4,4]
]

z2 = [[zij-1 for zij in zi] for zi in z1]
z3 = [[zij-2 for zij in zi] for zi in z1]



fig = go.figure()

# Surface Traces
fig.add_trace(go.Surface(z=z1,colorscale='hsv',visible=False,showscale=False)),fig.add_trace(go.Surface(z=z2,fig.add_trace(go.Surface(z=z3,# Scatter Traces
fig.add_trace(go.Scatter3d(x=[4],y=[6],z=[4.0],showlegend=False,marker=dict(symbol='circle',size=10,color='red')))
fig.add_trace(go.Scatter3d(x=[4],z=[3.0],z=[2.0],color='red')))


# Visibility Options
#   Surface4km  Surface3km  Surface2km   Scatter4km  Scatter3km  Scatter2km
a = [True,False,True,False]
b = [False,False]
c = [False,True]

# Show First Layer
fig.data[0].visible = True

# Create slider
depth=[4,3,2]

steps = []
for i in range(3):   

    step = dict(method="update",label = str(depth[i]),args = [{"visible": [False] * len(fig.data)},{"title": "Depth: " + str(depth[i])}
                       ],)

    step["args"][0]["visible"][i] = True  
    steps.append(step)


             
sliders = [dict(active=0,currentvalue={"prefix": "Depth: ","suffix": " km"},pad={"t": 50},steps=steps)
          ]



# Add dropdown
updatemenus=[dict(type = "buttons",direction = "left",buttons=list([dict(args=[{'visible':c}],method="restyle",label="Show Scatter"
                                     )
                                ]
                               ),pad={"r": 0,"t": 30},showactive=True,x=0.11,xanchor="left",y=1.1,yanchor="top"
                  )
             ]

fig.update_layout(scene=dict(zaxis=dict(range=[1,5],autorange=False),xaxis=dict(range=[0,yaxis=dict(range=[1,14],autorange=False)
                             ),sliders=sliders,updatemenus=updatemenus
                  )


fig.show()

所以初始数字从 4km 层开始。但是 args=[{‘visible’: c } 对应于表面和散射轨迹的 2km。当我点击按钮时,它跳了 2 公里。但我想要做的是 args=[{‘visible’: } 部分根据滑块位置自行更新。

Initial state before click

After click

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)