动画二次网格变化(matshow)

ene*_*ene 9 python numpy matplotlib

我有一个带有一些值的NxN网格,每次更改都会改变.我找到了一种用matshow函数绘制单个网格配置的方法,但我不知道如何更新每个时间步的状态.这是一个简单的例子:

from pylab import *
from matplotlib import pyplot

a = arange(25)
a = a.reshape(5,5)
b = 10*rand(5,5)
matshow(a-b, cmap = cm.jet)
colorbar()
show()
Run Code Online (Sandbox Code Playgroud)

此代码生成以下图片: 在此输入图像描述
现在想象下一次步骤有些值会改变,所以这张图片也应如此.这是我心中的逻辑:

from pylab import *
from matplotlib import pyplot

a = arange(25)
a = a.reshape(5,5)
time=10
for t in range(time):
    b = 10*rand(5,5)
    print b
    matshow(a-b, cmap=cm.jet)
    colorbar()
show()
Run Code Online (Sandbox Code Playgroud)

这会产生10张照片.我想动画这个而不是生成单个图片,例如我想选择更改之间的时间步长(即帧速率).
此外,我愿意接受不同功能的建议,如果matshow不是这样的话,但请保持简单,我相对缺乏经验.

bmu*_*bmu 15

matplotlib 1.1有一个动画模块(看一下例子).

使用animation.FuncAnimation你可以像这样更新你的情节:

import numpy as np
import matplotlib.pyplot as plt 
import matplotlib.animation as animation

def generate_data():
    a = np.arange(25).reshape(5, 5)
    b = 10 * np.random.rand(5, 5)
    return a - b 

def update(data):
    mat.set_data(data)
    return mat 

def data_gen():
    while True:
        yield generate_data()

fig, ax = plt.subplots()
mat = ax.matshow(generate_data())
plt.colorbar(mat)
ani = animation.FuncAnimation(fig, update, data_gen, interval=500,
                              save_count=50)
plt.show()
Run Code Online (Sandbox Code Playgroud)

您可以使用以下方法保存动画:

ani.save('animation.mp4')
Run Code Online (Sandbox Code Playgroud)

我救了它

ani.save('animation.mp4', clear_temp=False)
Run Code Online (Sandbox Code Playgroud)

框架是守恒的,你可以创建一个动画gif,如下所示

convert *.png animation.gif
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述