Matplotlib实时更新绘图:循环修改100×100矩阵时逐行重绘实现问题
Matplotlib 动态更新矩阵绘图解决方案
你的需求完全可以实现,当前代码运行结果不符合预期,核心是存在几处逻辑错误:
- 内层
j循环每次迭代都调用ax.plot()生成新曲线,没有清理旧曲线,导致画布线条累计冗余 line1.set_ydata()传入的是单个数值tab[i,j],和x轴100个点的长度不匹配,无法正确渲染整行数据- 外层
i循环结束后仅移除了最后一根生成的曲线,之前的所有曲线都残留在画布上
以下是修正后的可运行代码:
from random import randint import matplotlib.pyplot as plt import numpy as np import random as rand import time # 可选,加延时方便观察动画效果 tab = np.eye(100, 100) x = np.arange(0, 100, 1) plt.ion() fig = plt.figure() ax = fig.add_subplot(111) # 提前设置y轴范围,避免自动缩放导致画面跳变 ax.set_ylim(0, 255) for i in range(100): # 外层循环开始先清空当前画布所有线条,满足重置绘制的需求 ax.lines.clear() # 提前创建当前行对应的曲线对象,不需要每次内层循环重复生成 line1, = ax.plot(x, tab[i, :], 'r-') for j in range(100): tab[i, j] = rand.randint(0, 254) # 更新整行数据作为y轴数值 line1.set_ydata(tab[i, :]) fig.canvas.draw() fig.canvas.flush_events() # 可选:加1ms延时,方便观察逐点更新的效果 time.sleep(0.001)
运行效果对比
- 当前你运行代码得到的结果:

- 修正后可得到的期望效果:

内容的提问来源于stack exchange,提问作者Jakub Świniarski
相关产品推荐
相关产品推荐

