Plotly Python:通过按钮切换滑块显示隐藏的实现问题
解决Plotly按钮切换滑块显示/隐藏的问题
原代码的核心问题是按钮args中更新滑块可见性的语法错误。Plotly的update方法里,布局属性的修改需要放在第二个参数中,且由于sliders是数组类型,要直接指定每个滑块的visible状态。
修正后的代码如下:
import numpy as np import plotly.graph_objects as go # Create figure fig = go.Figure() # Add traces, one for each slider step for step in np.arange(0, 5, 0.1): fig.add_trace( go.Scatter( visible=False, line=dict(color="#00CED1", width=6), name="𝜈 = " + str(step), x=np.arange(0, 10, 0.01), y=np.sin(step * np.arange(0, 10, 0.01)))) # Make 10th trace visible fig.data[10].visible = True # Create slider steps steps = [] for i in range(len(fig.data)): step = dict( method="update", args=[{"visible": [False] * len(fig.data)}, {"title": "Slider switched to step: " + str(i)}], ) step["args"][0]["visible"][i] = True steps.append(step) # Define two sliders (one visible initially, one hidden) sliders = [dict( active=10, currentvalue={"prefix": "Frequency: "}, pad={"t": 50}, steps=steps, visible=True, ), dict( active=20, currentvalue={'prefix': 'Second'}, pad={'t':50}, steps=steps, visible=False, )] # Prepare trace visibility states for each button all_false = [False] * len(fig.data) first = all_false.copy() first[10] = True sec = all_false.copy() sec[20] = True fig.update_layout( sliders=sliders, updatemenus=[ dict( type='buttons', buttons=[ dict( label='Show first slider', method='update', args=[ {'visible': first}, # 更新trace可见性 { 'title': "First Slider", 'xaxis': {'title': 'First X axis'}, 'yaxis': {'title': 'First Y Axis'}, # 直接更新sliders数组中每个元素的visible属性 'sliders': [{'visible': True}, {'visible': False}] } ] ), dict( label='Show Second Slider', method='update', args=[ {'visible': sec}, # 更新trace可见性 { 'title': 'Second Slider', 'xaxis': {'title': 'Second X Axis'}, 'yaxis': {'title': 'Second Y Axis'}, # 切换两个滑块的可见状态 'sliders': [{'visible': False}, {'visible': True}] } ] ) ] ) ] ) fig.show()
关键修正点:
- 将滑块可见性的更新从第三个参数移到第二个参数(布局参数)中,因为
update方法的第二个参数负责修改布局属性 - 直接通过
'sliders': [{'visible': True}, {'visible': False}]的形式,指定数组中每个滑块的可见状态,对应定义的两个滑块顺序 - 修正了原代码中
xaxis的属性名错误(label改为title)
内容的提问来源于stack exchange,提问作者dlewczyk
相关产品推荐
相关产品推荐

