You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 09:33:18