matplotlib的动画不能在spyder中工作

时间:2016-03-07 23:18:54

标签: python animation matplotlib

我是python和stackoverflow的新手,我正在matplotlib上看一些例子。虽然我能够在stackoverflow中找到具有相同问题的previously unanswered question,但我没有运气地搜索了这个问题的解决方案。

基本上,我复制了matplotlib中示例中提供的代码;例如:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def data_gen(t=0):
    cnt = 0
    while cnt < 1000:
        cnt += 1
        t += 0.1
        yield t, np.sin(2*np.pi*t) * np.exp(-t/10.)
def init():
    ax.set_ylim(-1.1, 1.1)
    ax.set_xlim(0, 10)
    del xdata[:]
    del ydata[:]
    line.set_data(xdata, ydata)
    return line,

fig, ax = plt.subplots()
line, = ax.plot([], [], lw=2)
ax.grid()
xdata, ydata = [], []


def run(data):
    # update the data
    t, y = data
    xdata.append(t)
    ydata.append(y)
    xmin, xmax = ax.get_xlim()

    if t >= xmax:
        ax.set_xlim(xmin, 2*xmax)
        ax.figure.canvas.draw()
    line.set_data(xdata, ydata)

    return line,

ani = animation.FuncAnimation(fig, run, data_gen, blit=False, interval=10,
                          repeat=False, init_func=init)
plt.show()

我在Anaconda 2(python 2.7)和&amp ;;中都运行了各种动画示例。 3(python 3.5),两个都给我一个没有动画的空白图。但是,每个动画在Enthought Canopy中运行得非常好。

使用spyder时是否有一些简单的东西?

1 个答案:

答案 0 :(得分:16)

您必须更改后端才能在IPython控制台中运行动画。您可以通过在动画之前运行if (likely) { // do something lightweight (addition, subtraction, etc.) } else { // do something expensive (cache-miss, division, sin/cos/tan etc.) } 命令来完成此操作。

如果您不想每次都使用此命令,您可以访问: %matplotlib qt 并将其从Tools > Preferences > IPython Console > Graphics > Backend更改为"Inline"

更新:2018年2月,现在是python&gt;首选项在窗口中,在窗口的LH窗格中选择IPython控制台。选择Graphics选项卡,后端就在那里。

有关详细信息,请阅读this