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

Plotly单帧含多条3D散点迹的动画无法正常播放问题求解

Plotly 3D散点动画单帧多trace 修复方案

核心问题原因

  • 初始化Figure的data数组长度与单帧包含的trace数量不匹配:你每帧设置了2条trace,但初始data仅定义了1个空Scatter3d对象,Plotly动画默认按索引替换对应位置的初始trace,索引超出初始data长度的trace不会被渲染
  • TestTrace类中z轴数据长度与x、y不匹配:x和y设置为11个点,但生成z时未指定num参数,np.linspace默认生成50个点,长度不一致导致trace无法正常渲染
  • 未指定Scatter3d的渲染模式,默认仅渲染标记点,你设置的line参数不会生效

修复后完整代码

import numpy as np
import plotly.graph_objects as go

def animationTest(frames):
    # 定义帧
    frames=[
            go.Frame(
                data=[
                    go.Scatter3d(
                        x=trace.x,
                        y=trace.y,
                        z=trace.z,
                        mode='lines', # 明确指定渲染线条
                        line=dict(width=2)
                    )
                for trace in frame],
            )
        for frame in frames]
    # 定义画布
    fig = go.Figure(
        # 初始data长度和单帧trace数量保持一致,这里是2条
        data=[
            go.Scatter3d(mode='lines', line=dict(width=2)),
            go.Scatter3d(mode='lines', line=dict(width=2))
        ],
        layout=go.Layout( # 样式配置
            scene=dict(),
            updatemenus=[
                dict(
                    type='buttons',
                    buttons=[
                        dict(
                            label='播放',
                            method='animate',
                            # 增加过渡配置让动画更流畅
                            args=[None, {"frame": {"duration": 300}, "transition": {"duration": 100}}]
                        )
                    ]
                )
            ]
        ),
        frames=frames
    )
    fig.show()

class TestTrace():
    # 测试用3D数据
    def __init__(self,ind):
        self.x = np.linspace(-5.,5.,11)
        self.y = ind*np.linspace(-5.,5.,11)
        # 修正z轴点数和x、y一致,都是11个
        self.z = np.linspace(-5.,5.,11)

fps = np.linspace(1.,10.,11)
inds = [-2,2]

# 生成每帧的trace数据
frames = [[TestTrace(ind=f*ind) for ind in inds] for f in fps]

animationTest(frames)

验证说明

运行上述代码后会生成包含2条动态3D线的动画,点击播放按钮即可正常播放,两条线的斜率会随帧变化同步更新。

内容的提问来源于stack exchange,提问作者user14893379

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:54:04