Plotly技术问询:如何实现同一图表中双散点图的同步滑块控制
解决Plotly滑块同步更新两个散点图的问题
问题核心是你的滑块逻辑是逐个切换单个轨迹,而实际需要每个滑块步骤对应同时激活一组(sin和cos)轨迹。以下是修正后的代码:
import plotly.graph_objects as go import numpy as np # 生成step值列表,方便后续索引对应 step_values = np.arange(0, 5, 0.5) num_steps = len(step_values) # Create figure fig = go.Figure() # Add traces: 每个step对应sin和cos两个轨迹 for step in step_values: fig.add_traces([ go.Scatter( x=np.arange(0, 10, 0.01), y=np.sin(step * np.arange(0, 10, 0.01)), name=f"sin({step}x)"), go.Scatter( x=np.arange(0, 10, 0.01), y=np.cos(step * np.arange(0, 10, 0.01)), name=f"cos({step}x)")]) # 默认隐藏所有轨迹,再设置初始显示的一组(对应第10个step,索引9) for trace in fig.data: trace.visible = False initial_step_idx = 9 fig.data[2*initial_step_idx].visible = True fig.data[2*initial_step_idx + 1].visible = True # Create slider steps: 每个step对应激活一组两个轨迹 steps = [] for i in range(num_steps): # 初始化所有轨迹为不可见 visible = [False] * len(fig.data) # 激活当前step对应的sin和cos轨迹 visible[2*i] = True visible[2*i + 1] = True step = dict( method="update", args=[ {"visible": visible}, {"title": f"Slider switched to step: {step_values[i]}"} ] ) steps.append(step) sliders = [dict( active=initial_step_idx, currentvalue={"prefix": "Frequency: "}, pad={"t": 50}, steps=steps )] fig.update_layout( sliders=sliders, title="同步更新的sin/cos散点图" ) fig.show()
关键修改说明:
- 单独提取
step_values列表,确保滑块步骤数量与生成的轨迹组数量一致 - 初始化时统一设置所有轨迹不可见,再手动激活初始组的两个轨迹
- 滑块步骤不再遍历单个轨迹,而是按轨迹组处理:每个步骤对应激活
2*i和2*i+1位置的两个轨迹 - 调整
active参数为step的索引,而非单个轨迹的索引
这样滑块切换时,就能同步显示对应step值下的sin和cos两个散点图了。
内容的提问来源于stack exchange,提问作者Simone P
相关产品推荐
相关产品推荐

