Python Plotly如何设置点击播放按钮后动画无限循环
Plotly动画点击播放后无限循环的实现方案
你不需要找不存在的run_forever配置项,Plotly的animate方法原生支持循环参数,直接在按钮的args配置中添加loop=True即可实现无限循环效果。
具体修改方法
找到Play按钮的args配置项,在第二个配置字典(和frame、transition、fromcurrent参数平级的位置)添加loop: True即可,不要把该参数写到frame子字典内部,否则配置不会生效。
修改后可直接运行的完整代码如下:
import plotly.graph_objects as go import numpy as np def rotate_z(theta): w = 3 return np.cos(theta) * w, np.sin(theta) * w, 1 # 螺旋线坐标定义(补全原示例遗漏的坐标生成逻辑) t = np.linspace(0, 10, 50) x = np.cos(t) y = np.sin(t) z = t x_eye, y_eye, z_eye = rotate_z(0) fig= go.Figure(go.Scatter3d(x=x, y=y, z=z, mode='markers')) fig.update_layout( title='Animation Test', width=600, height=600, scene_camera_eye=dict(x=x_eye, y=y_eye, z=z_eye), updatemenus=[dict(type='buttons', showactive=False, y=1, x=0.8, xanchor='left', yanchor='bottom', pad=dict(t=45, r=10), buttons=[dict(label='Play', method='animate', args=[None, dict(frame=dict(duration=5, redraw=True), transition=dict(duration=5), fromcurrent=True, mode='immediate', loop=True # 新增该行即可开启无限循环 )] ) ] ) ] ) frames=[] for t in np.arange(0, 6.26, 0.01): xe, ye, ze = rotate_z(-t) frames.append(go.Frame(layout=dict(scene_camera_eye=dict(x=xe, y=ye, z=ze)))) fig.frames=frames fig.show()
补充说明
- 如果不需要无限循环,只想循环固定次数,把
loop的值改为对应正整数即可,比如loop=2就会完整播放2次动画后自动停止。 - 该参数归类在动画方法的配置项中,没有放在官方文档的显眼示例位置,所以容易被遗漏。

内容的提问来源于stack exchange,提问作者Tobias Jacob
相关产品推荐
相关产品推荐

