matplotlib

时间:2017-08-01 17:15:28

标签: python matplotlib plot

我一直面临着一些问题,试图在其中添加几个不同的子图。这是一个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),但我无法使其工作,我认为我的这种方法会更简单。

有什么想法吗?

1 个答案:

答案 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()