声明1:没有预先计算的数组
声明2:没有set_ydata
我已阅读Dynamically updating plot in matplotlib和How 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()
答案 0 :(得分:0)
我在找到这个问题后找到了答案:Matplotlib ion() function fails to be interactive
上面的代码可以实时制作'只需用plt.pause(0.3)替换睡眠(0.3),就不需要进行其他更改。这是非常意外的,我以前从未使用过plt.pause()函数,但它只是起作用。