我有一个2D numpy数组(名为enviro_grid),其中每个循环迭代都会有零,一和二。我想为更改的色彩映射的迭代设置动画,以便我可以在视觉上验证/演示所有代理都遵循我期望的行为。
代码的骨架轮廓:
import numpy as np
import random
import pylab as plt
#...initialize values, setup, seed grid with 0's, 1's, 2's, etc...
for t_weeks in range(time_limit):
for j in range(player_n):
#...Here lie a bunch of for/if loops which shuffle values around via rules...
#...culminating in grid/array updates via the following line...
#...which is seen a few times per iteration as the P[:,j]'s change.
#...Note that P[6, j] and P[7, j] are just x, y array locations for each agent...
#...while P[0, j] is just a designation of 1 or 2
enviro_grid[int( P[6, j] ), int( P[7, j] )] = int( P[0, j] )
#...Then I have this, which I don't really understand so much as...
#... just copy/pasted from somewhere
im = plt.imshow(enviro_grid, cmap = 'hot')
plt.colorbar(im, orientation='horizontal')
plt.show()
我已经查看了一些已经提供帮助的链接;例如,这些
How to animate the colorbar in matplotlib
Colormap issue using animation in matplotlib
http://jakevdp.github.io/blog/2012/08/18/matplotlib-animation-tutorial/
但是我太过于联盟了:Python要理解我所看到的一半,更不用说我自己的代码了。只是为了帮助说明我可能需要使用的那种非常基本的帮助,我过去完成的绘图更多的是形式图(x,y,选项)和任何动画I&#39 ;完成只是循环迭代期间绘图的自然副产品。所有这些fig.method和plt.method的东西,最终plt.show()的最终,混淆和激怒了我。在所有上述例子中使用def()函数进一步加剧了我对于将行转换到我自己的上下文时的不清晰性。
有人会介意根据我的代码为此提供有效的解决方案吗?如果需要,我可以提供更多详细信息,但我正在努力保持每个stackoverflow偏好的这个简短。
提前感谢任何人提供的任何帮助。
答案 0 :(得分:0)
在matplotlib中执行简单动画的最大挑战是理解并解决plt.show
命令的阻塞行为。在this question中很好地描述了它。对于您的具体问题,也许这样的事情将是一个很好的起点:
import numpy as np
import pylab as plt
def get_data(): return np.random.randint(0,3,size=(5,5))
im = None
for _ in xrange(20): # draw 20 frames
if not im:
# for the first frame generate the plot...
im = plt.imshow(get_data(), cmap = 'hot', interpolation='none',vmin=0,vmax=2)
plt.colorbar(im, orientation='horizontal')
else:
# ... for subsequent times only update the data
im.set_data(get_data())
plt.draw()
plt.pause(0.1)
请注意,您需要使用plt.pause
命令为您的GUI提供足够的时间来实际绘制绘图,但您可能会缩短时间。