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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:06:04