我不太了解如何创建动画数据类。要点如下:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
x = np.arange(100).reshape((100, 1))
y = np.random.randn(100, 1)
xy = np.hstack((x, y))
class PlotData:
def __init__(self):
fig, ax = plt.subplots()
fig.set_size_inches((11, 9))
self.fig = fig
self.ax = ax
self.ln0, = ax.plot([], [])
def init(self):
self.ln0.set_data([], [])
return(self.ln0, )
def update(self, frame_no):
data = xy[0:frame_no + 1]
self.ln0.set_data(data[:, 0], data[:, 1])
return(self.ln0, )
if __name__ == '__main__':
my_plot = PlotData()
anim = animation.FuncAnimation(my_plot.fig, my_plot.update,
init_func=my_plot.init, blit=True,
frames=99, interval=50)
plt.show()
这只会产生 init 方法的输出,但不会产生更新,因此最终生成没有动画的空白图。发生了什么事?
答案 0 :(得分:2)
对我来说,您的代码可以正常工作。唯一的问题是,大多数数据超出了绘图限制。如果您这样调整地块限制:
class PlotData:
def __init__(self):
fig, ax = plt.subplots(figsize = (11,9))
self.fig = fig
self.ax = ax
self.ax.set_xlim([0,100])
self.ax.set_ylim([-3,3])
self.ln0, = ax.plot([], [])
该行动画效果很好。如果您希望自动调整x和y限制,请参见https://gist.github.com/jakubholynet/6c8f615c195ebb7b3ef4d9a0a0ee4362,了解如何进行调整。但是,如果我没记错的话,这仅适用于blit=False
。