动态修改&更新matplotlib中的绘图

时间:2015-01-27 19:11:54

标签: python matplotlib plot

声明1:没有预先计算的数组

声明2:没有set_ydata

我已阅读Dynamically updating plot in matplotlibHow to update a plot in matplotlib?的回答,他们的情况不同。

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

案例1,你有一个二维数组,你随机改变值(i,j),你可以把它想象成ising模型或渗透模型或你熟悉的任何模型。如何显示阵列的演变?

情况2,你有一个三角形网格,你正在深度优先搜索节点,你想要标记路径,或者你正在做一些更简单的事情:使用半边数据结构跟踪网格边界。实时可视化对于检查算法实现的正确性有很大帮助。

有足够的背景,如果你的迭代次数不是很大(或者你不关心内存),那么第0个可以通过set_ydata方法解决,但是情况1和2?我没有暗示。目前我的解决方案'是在磁盘上保存数百个数字。我试图只绘制一个数字并更新它,但matplotlib似乎更愿意等待一切都完成并立即绘制所有内容。谁能告诉我如何动态更新数字?非常感谢你!

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

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()

1 个答案:

答案 0 :(得分:0)

我在找到这个问题后找到了答案:Matplotlib ion() function fails to be interactive

上面的代码可以实时制作'只需用plt.pause(0.3)替换睡眠(0.3),就不需要进行其他更改。这是非常意外的,我以前从未使用过plt.pause()函数,但它只是起作用。