Python 动态修改&;在matplotlib中更新绘图

Python 动态修改&;在matplotlib中更新绘图,python,matplotlib,plot,Python,Matplotlib,Plot,权利要求1:没有预计算数组 权利要求2:无集合数据 我读过和的答案,他们的情况不同 案例0,您正在迭代求解大型线性代数问题,如何实时监控解决方案的收敛性?这样,一旦解决方案出现爆炸迹象,您就可以停止计算并节省等待时间 在第一种情况下,你有一个二维数组,你随机改变值(i,j),你可以把它看作伊辛模型或渗流模型,或者你熟悉的任何模型。如何显示阵列的演变 案例2,您有一个三角形网格,您正在对节点执行深度优先搜索,并希望标记路径,或者您正在执行更简单的操作:使用半边数据结构跟踪网格边界。实时可视化对于检

权利要求1:没有预计算数组

权利要求2:无集合数据

我读过和的答案,他们的情况不同

案例0,您正在迭代求解大型线性代数问题,如何实时监控解决方案的收敛性?这样,一旦解决方案出现爆炸迹象,您就可以停止计算并节省等待时间

在第一种情况下,你有一个二维数组,你随机改变值(i,j),你可以把它看作伊辛模型或渗流模型,或者你熟悉的任何模型。如何显示阵列的演变

案例2,您有一个三角形网格,您正在对节点执行深度优先搜索,并希望标记路径,或者您正在执行更简单的操作:使用半边数据结构跟踪网格边界。实时可视化对于检查算法实现的正确性有很大帮助

足够的背景知识,如果迭代次数不多(或者不关心内存),第0个问题可以通过set_ydata方法解决,但是情况1和2?我没有任何暗示。目前我的“解决方案”是在磁盘上保存数百个数字。我试着只绘制一个图形并进行更新,但matplotlib似乎更喜欢等待一切完成,然后立即绘制所有图形。谁能告诉我如何动态更新图形?多谢各位

测试代码如下(目前它只在最后绘制一次):


我在找到这个问题后才找到答案:

只需将睡眠(0.3)替换为plt即可实现上述代码的“实时”。暂停(0.3),无需进行其他更改。这是非常出乎意料的,我以前从未使用过plt.pause()函数,但它很简单

from numpy import *
import matplotlib.pyplot as plt
from time import sleep

M = zeros((5,5))

fig = plt.figure(1)
for n in range(10):
    i = random.randint(5)
    j = random.randint(5)
    print 'open site at ', i, j
    M[i, j] = 1
    plt.imshow(M, 'gray', interpolation = 'nearest')
    plt.plot(j, i, 'ro')  # also mark open site (I have reason to do this)
    fig.canvas.draw()
    sleep(0.3)

plt.show()