使用matplotlib的draw_artist时如何实现Y轴自动适配数据缩放
问题原因
你当前使用draw_artist做局部重绘的逻辑不会自动触发坐标轴范围的重计算:初始全零的y值将y轴范围固定在0附近,后续更新y数据后没有主动触发轴范围更新,就会出现刻度不匹配的问题。
解决方法
每次更新完y轴数据后,先调用axs.relim()重新计算当前数据的边界,再调用axs.autoscale_view()让坐标轴自动适配新的数据范围即可。
修改后的完整代码
import matplotlib.pyplot as plt # start with zeroed data data_points = 10 fig, axs = plt.subplots() x = list(range(data_points)) y = [0] * data_points line, = axs.plot(x, y) # initial render is required fig.canvas.draw() for i in range(10): y.pop(0) y.append(i / 10) line.set_ydata(y) # 新增两行:重新计算数据边界 + 自动适配轴范围 axs.relim() axs.autoscale_view() axs.draw_artist(axs.patch) axs.draw_artist(line) fig.canvas.draw() plt.show()
如果不需要每次循环都调整轴范围,也可以在循环结束后统一调用一次relim和autoscale_view再执行最后一次重绘,性能更好。
如果你只需要动态调整Y轴范围、X轴保持固定,可以将
autoscale_view修改为axs.autoscale_view(scalex=False),避免X轴出现不必要的变动。
内容的提问来源于stack exchange,提问作者Edy Bourne
相关产品推荐
相关产品推荐

