Python 简单Matplotlib动画不工作

Python 简单Matplotlib动画不工作,python,animation,matplotlib,Python,Animation,Matplotlib,我试图运行下面的代码,但它不能正常工作。我遵循了matplotlib的文档,想知道下面这段简单代码的错误是什么。我正在尝试用anaconda发行版将其制作成jupyter笔记本。我的python版本是2.7.10 import numpy as np from matplotlib import pyplot as plt from matplotlib import animation fig = plt.figure() def init(): m = np.zeros(4800

我试图运行下面的代码,但它不能正常工作。我遵循了matplotlib的文档,想知道下面这段简单代码的错误是什么。我正在尝试用anaconda发行版将其制作成jupyter笔记本。我的python版本是2.7.10

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

fig = plt.figure()

def init():
    m = np.zeros(4800)
    m[0] = 1.6
    return m

def animate(i):
    for a in range(1,4800):
        m[a] = 1.6
        m[a-1] = 0
    return m    

anim = animation.FuncAnimation(fig, animate, init_func=init,
                               frames=200, interval=20, blit=True)

plt.show()

您需要创建一个实际的绘图。仅仅更新NumPy数组是不够的。 下面是一个很可能实现您的意图的示例。由于必须在多个位置访问相同的对象,因此类似乎更适合,因为它允许通过
self
访问实例属性:

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



class MyAni(object):
    def __init__(self, size=4800, peak=1.6):
        self.size = size
        self.peak = peak
        self.fig = plt.figure()
        self.x = np.arange(self.size)
        self.y = np.zeros(self.size)
        self.y[0] = self.peak
        self.line, = self.fig.add_subplot(111).plot(self.x, self.y)

    def animate(self, i):
        self.y[i - 1] = 0
        self.y[i] = self.peak
        self.line.set_data(self.x, self.y)
        return self.line,

    def start(self):
        self.anim = animation.FuncAnimation(self.fig, self.animate,
            frames=self.size, interval=20, blit=False)

if __name__ == '__main__':
    ani = MyAni()
    ani.start()

    plt.show()

您需要创建一个实际的绘图。仅仅更新NumPy数组是不够的。 下面是一个很可能实现您的意图的示例。由于必须在多个位置访问相同的对象,因此类似乎更适合,因为它允许通过
self
访问实例属性:

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



class MyAni(object):
    def __init__(self, size=4800, peak=1.6):
        self.size = size
        self.peak = peak
        self.fig = plt.figure()
        self.x = np.arange(self.size)
        self.y = np.zeros(self.size)
        self.y[0] = self.peak
        self.line, = self.fig.add_subplot(111).plot(self.x, self.y)

    def animate(self, i):
        self.y[i - 1] = 0
        self.y[i] = self.peak
        self.line.set_data(self.x, self.y)
        return self.line,

    def start(self):
        self.anim = animation.FuncAnimation(self.fig, self.animate,
            frames=self.size, interval=20, blit=False)

if __name__ == '__main__':
    ani = MyAni()
    ani.start()

    plt.show()

你能详细说明什么不起作用吗?你得到了什么,你期望得到什么?代码的一个问题当然是没有绘制任何东西。您看过matplotlib动画示例了吗?我在这里尝试的是获取值1.6,并在每次交互时将其向右移动。因此,在一个5的数组中,例如在时间t=1时,我希望得到[1.6,0,0,0],在时间t=2时,得到[0,1.6,0,0,0],依此类推。我已经看了一些例子,但是所有的例子都是复杂的。我清楚了吗?你能详细说明什么不起作用吗?你得到了什么,你期望得到什么?代码的一个问题当然是没有绘制任何东西。您看过matplotlib动画示例了吗?我在这里尝试的是获取值1.6,并在每次交互时将其向右移动。因此,在一个5的数组中,例如在时间t=1时,我希望得到[1.6,0,0,0],在时间t=2时,得到[0,1.6,0,0,0],依此类推。我已经看了一些例子,但是所有的例子都是复杂的。我清楚了吗?为什么必须在末尾添加名称='main'?下面的部分
if\uuuuuu name\uuuuuuu='\uuuuu main\uuuu':
仅在模块(此源文件)用作程序时才会执行,即在控制台:
python my\u program.py
。如果此模块由其他模块导入(
import my_program
),则将跳过此部分。这并不特定于此动画。为什么必须在末尾添加名称='main'?如果uuuu name uuuu='uuuu main uuu':仅当模块(此源文件)用作程序时才会执行,即在控制台:
python my_program.py
。如果此模块由其他模块导入(
import my_program
),则将跳过此部分。这不是以任何方式特定于此动画的。