我一直面临着一些问题,试图在其中添加几个不同的子图。这是一个MWE:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
data=np.random.rand(4, 50, 150)
Z=np.arange(0,120,.8)
fig, axes = plt.subplots(2,2)
it=0
for nd, ax in enumerate(axes.flatten()):
ax.plot(data[nd,it], Z)
def run(it):
print(it)
for nd, ax in enumerate(axes.flatten()):
ax.plot(data[nd, it], Z)
return axes.flatten()
ani=animation.FuncAnimation(fig, run, frames=np.arange(0,data.shape[1]), interval=30, blit=True)
ani.save('mwe.mp4')
正如您所看到的,我尝试使用FuncAnimation()
绘制预生成的数据。从我已经看到的这种方法应该可以工作,然而,它输出一个空白的.mp4
文件大约一秒钟并且没有错误,所以我不知道出了什么问题。
我还尝试了一些其他方法来绘制子图(如this one),但我无法使其工作,我认为我的这种方法会更简单。
有什么想法吗?
答案 0 :(得分:0)
您可能希望更新这些行,而不是将新数据绘制到它们。这也可以设置blit=False
,因为保存动画,无论如何都不会使用blitting。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
data=np.random.rand(4, 50, 150)
Z=np.arange(0,120,.8)
fig, axes = plt.subplots(2,2)
lines=[]
for nd, ax in enumerate(axes.flatten()):
l, = ax.plot(data[nd,0], Z)
lines.append(l)
def run(it):
print(it)
for nd, line in enumerate(lines):
line.set_data(data[nd, it], Z)
return lines
ani=animation.FuncAnimation(fig, run, frames=np.arange(0,data.shape[1]),
interval=30, blit=True)
ani.save('mwe.mp4')
plt.show()