matplotlib.animation中的[0 ,:]是什么意思

时间:2018-12-24 12:14:50

标签: python matplotlib animation

我正在尝试从我的讲座中调试此代码,以使其在我的计算机(Win10)上运行。在终端中运行时,我得到了plt.figure()部分定义的第一张图像,但是动画部分从未运行。我得到了与枕头有关的错误代码。

我已使用pip下载ffmep,并以相同的方式更新了matplotlib。

代码如下:

if plot_flag == True:
    res = []
    for i in range(N):
        res.append(np.array(list_particles[i].pos))

if plot_flag == True:
    ### display one trajectory
    pos = res[0]
    plt.plot(pos[:,0],pos[:,1],'k-')
    plt.show()

    ###produce an animation 
    fig = plt.figure()
    ax = fig.add_subplot(111, autoscale_on=False, xlim=(0, L), ylim=(0, L))
    ax.grid()

    patch=[]
    for i in range(N):
        patch.append(plt.Circle(res[i][0,:],list_particles[i].radius,fc="r"))
        ax.add_patch(patch[i])


    def animate(i):
        for j in range(N):
            x,y=res[j][i,:]
            patch[j].center= (x,y)


    def init():
        line.set_data([], [])
        time_text.set_text('')
        return line, time_text

    ani = animation.FuncAnimation(fig, animate, np.arange(0, Niter),
                            interval=25, blit=False)
    ani.save("gas.mp4",fps=25)

关闭图形窗口后,我本来希望获得动画,但是却收到错误消息:

MovieWriter ffmpeg unavailable. Trying to use pillow instead.

对我或互联网都没有任何意义。除了res[i][0,:](第16行)之外,我几乎能理解所有这段代码,这对我来说没有任何意义,起初我以为逗号不应该在那儿,但在第21行重复相同的语法:{ {1}}。

我也无法在spyder中运行此代码,因为遇到了deprecated()错误,它甚至可以有效地阻止调试运行。

有人可以帮助我了解发生了什么,因为我现在完全迷失了, 非常感谢。

1 个答案:

答案 0 :(得分:0)

第一个输出表示它找不到ffmpeg(或其部分)。因此,您要么没有正确安装它,要么必须告诉它在哪里可以找到它(在Windows上我不知道如何找到它)。

pillow是一个图像处理库(它是PIL(Python图像库)的直接替代品),它尝试使用它。


第二种语法是numpy slicing,这是索引多维数组的方式。切片的工作方式与普通Python相同,只是每个维度的切片之间都用逗号隔开。

因此x[0,:]表示沿第一个维度(行,因为对象似乎总共有两个维度)获取第一个条目,然后沿第二个维度获取所有条目(因此整个第一行)。

pos[:,1]表示沿第一个维度获取所有条目(因此所有行),但是对于每一行,仅沿第二个维度获取第二个条目(因此它选择整个第二列)。