Plotly动画是否可按帧动态调整坐标轴刻度范围?
解决方案
问题根因
Plotly Express生成的动画默认会使用所有帧的全局数据范围作为固定轴范围,你直接在顶层调用update_xaxes/update_yaxes仅会修改初始帧的布局配置,切换动画帧时不会自动重新计算当前帧的数据范围,因此配置不会生效。
修复方法
你需要同时修改三处配置即可实现需求:
- 初始布局的x/y轴开启autorange
- 遍历所有动画帧,给每个帧单独配置x/y轴autorange=True
- 开启动画帧切换时的重绘配置,保证切换帧时重新计算轴范围
修正后的代码如下:
import pandas as pd import plotly.express as px def draw(x1_trim,y1_trim,time_trim): d = { "x1": x1_trim, "y1": y1_trim, "time": time_trim } df = pd.DataFrame(d) fig = px.scatter(df, x="x1", y="y1", animation_frame="time") # 初始布局开启自动范围 fig.update_xaxes(autorange=True) fig.update_yaxes(autorange=True) # 给每一个动画帧都配置自动范围 for frame in fig.frames: frame.layout.xaxis.autorange = True frame.layout.yaxis.autorange = True # 开启帧切换时的重绘,保证轴范围重新计算 fig.layout.updatemenus[0].buttons[0].args[1]["frame"]["redraw"] = True fig.show()
上述代码会在每次切换动画帧时,自动根据当前帧的所有点的x、y值计算适配的轴范围,超出常规范围的异常值不会超出画布。
内容的提问来源于stack exchange,提问作者Eog
相关产品推荐
相关产品推荐

