Arrays Python:设置更改2D numpy数组的彩色贴图动画

Arrays Python:设置更改2D numpy数组的彩色贴图动画,arrays,numpy,animation,Arrays,Numpy,Animation,我有一个2D numpy数组(名为enviro_grid),其中有0、1和2,它们在每次循环迭代中来回移动。我想制作一个不断变化的彩色贴图的迭代动画,这样我就可以在视觉上验证/演示所有代理都在遵循我期望的行为 代码大纲: 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 ra

我有一个2D numpy数组(名为enviro_grid),其中有0、1和2,它们在每次循环迭代中来回移动。我想制作一个不断变化的彩色贴图的迭代动画,这样我就可以在视觉上验证/演示所有代理都在遵循我期望的行为

代码大纲:

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()
我已经查看了一些链接以寻求帮助;比如说这些,

但我实在太不懂Python了,无法理解我所看到的一半内容,更不用说根据我自己的代码进行裁剪了。为了帮助说明我可能需要的非常基本的帮助,我过去所做的绘图更多的是形式绘图(x、y、选项),我所做的任何动画都只是循环迭代期间绘图的自然副产品。所有这些fig.method和plt.method的东西最终导致了最终的plt.show(),让我感到困惑和愤怒。在上面的所有示例中使用def()函数进一步加剧了我在将行转换到自己的上下文时的不清晰性

有人介意根据我的代码提供一个有效的解决方案吗?我可以提供更多的细节,如果需要的话,但我试图保持每个stackoverflow首选短


提前感谢所有人提供的帮助。

在matplotlib中制作简单动画的最大挑战是理解并解决
plt.show
命令的阻塞行为。在中对其进行了很好的描述。对于您的具体问题,以下内容可能是一个很好的起点:

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提供足够的时间来实际绘制绘图,但您可能可以缩短时间

(在我弄明白事情的时候删除了我以前的一些评论。我还意识到我删除了我说的非常感谢你的帮助,所以让我再说一遍:非常感谢你的帮助!)我意识到我可以链接到一个图像。所以为了澄清,我把“如果”循环的东西放在我的for loop/time循环中,在最后,它“起作用”,但执行此操作:同时给出此错误/警告消息:MatPlotLibDeprecation警告:在实现此GUI特定的函数之前使用默认事件循环警告。警告(str,mplDeprecation)。看起来您正在多次创建图像和颜色栏;可能每帧一次。在我发布的代码片段中,
imshow
colorbar
命令仅对第一帧执行,而对所有后续帧,已经存在的绘图数据正在更新。我不知道为什么在您身上r如果这些语句对每一帧都执行--您是否有可能在某个时候将
im
变量设置为
None
0
?此外,我没有收到此警告,因此它可能依赖于后端,但可能可以安全地忽略。哦!是的,当我用自己的I意外事件替换for循环时,就是这样lly将im=none放在它的内部而不是之前。修复了它,它工作正常。再次感谢,它看起来很棒!希望我能快速发布它的gif或其他东西。看着小白点追逐并吃掉橙色的点有点酷。下一步是优化我可怕的丑陋和不雅的代码。。。