在matplotlib中

时间:2016-10-14 09:01:12

标签: python animation matplotlib

我有一个时间依赖的矩阵,我想将进化绘制为动画。

我的代码如下:

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


n_frames = 3 #Numero de ficheros que hemos generado
data = np.empty(n_frames, dtype=object) #Almacena los datos

#Leer todos los datos
for k in range(n_frames):
    data[k] = np.loadtxt("frame"+str(k))


fig = plt.figure()
plot =plt.matshow(data[0])

def init():
    plot.set_data(data[0])
    return plot

def update(j):
    plot.set_data(data[j])
    return [plot]


anim = FuncAnimation(fig, update, init_func = init, frames=n_frames, interval = 30, blit=True)

plt.show()

但是,当我运行它时,我总是会收到以下错误:draw_artist can only be used after an initial draw which caches the render。我不知道这个错误来自哪里,也不知道如何解决它。 我已阅读this answerthis article,但仍不知道为什么我的代码无效。

感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:2)

你非常接近一个有效的解决方案。要么改变

plot = plt.matshow(data[0])

plot = plt.matshow(data[0], fignum=0)

或使用

plot = plt.imshow(data[0])

代替。

此处使用plt.matshow(data[0])的问题是,如果fignum参数保留为空(即默认等于None),则为creates a new figure。 由于fig = plt.figure()被调用且fig传递给FuncAnimation,因此您最终得到两个数字,一个数字为plt.matshow,另一个为空白数字按FuncAnimationFuncAnimation正在绘制的图形找不到初始绘图,因此它会引发

AttributeError: draw_artist can only be used after an initial draw which caches the render