好吧,您可以通过在图像上调用.set_data(),然后在图上调用fig.canvas.draw() 来为imshow 执行此操作。与仅调用 draw() 相比,我没有看到任何真正的性能优势 - 在下面的基准测试中(使用 WXAgg 作为后端),两者都给了我大约 25FPS。
import numpy as np
import matplotlib.pyplot as pp
import time
def animate_data(data):
fig,ax = pp.subplots(1,1)
# I'm not convinced that animated=True does anything either...
image = ax.imshow(data[0,:,:],animated=True)
# pp.draw()
fig.canvas.draw()
start = time.time()
tic = start
for ii in xrange(1,data.shape[0]):
if not(ii % 10):
toc = time.time()
print "FPS =\t%.6G" %(10./(toc-tic))
tic = time.time()
image.set_data(data[ii,:,:])
# pp.draw()
fig.canvas.draw()
print "Average FPS =\t%.6G" %(data.shape[0]/(time.time()-start))
fakedata = np.random.randn(200,512,512)
animate_data(fakedata)
quiver的情况下,可以使用.set_UVC()更新剧情:
fig,ax = subplots(1,1)
u1 = np.random.rand(10,10)
v1 = np.random.rand(10,10)
c1 = np.random.rand(10,10)
q = ax.quiver(u1,v1,c1)
fig.canvas.draw()
u2 = np.random.rand(10,10)
v2 = np.random.rand(10,10)
c2 = np.random.rand(10,10)
q.set_UVC(u2,v2,c2)
fig.canvas.draw()
据我所知,您无法以相同的方式更新 contour 绘图。我不确定无论如何都会有那么多收获,因为任何解决方案仍然需要重新计算给定数组输入的轮廓线应该去哪里。如果我是你,我会打电话给ax.contour() 和fig.canvas.draw()。