Matplotlib返回空图

时间:2017-06-18 08:11:21

标签: python animation matplotlib spyder

我有这个python代码:

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

n = 100
x = np.random.randn(n)

def update(curr):
    if curr == n:
        a.event_source.stop()
    plt.cla()
    bins = np.arange(-4,4,0.5)
    plt.hist(x[:curr],bins = bins)
    plt.gca().set_title('Samplng the Normal distribution')
    plt.gca().set_ylabel('Frequency')
    plt.gca().set_xlabel('Value')
    plt.annotate('n = {}'.format(curr), [3,27])

fig = plt.figure()
a = animation.FuncAnimation(fig, update, interval = 100)

它应该每3次绘制更新​​一次正态分布图,但是当我运行它时,我的情节是空的,没有任何反应。你知道为什么吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

问题中的代码完美无瑕。它每100毫秒更新一次图。

我的猜测如下。您不在此处使用plt.show()但仍看到情节的事实表明您在内联环境中使用它。例如。您可能正在使用Jupyter并且(有意或无意)已激活%matplotlib inline。内联后端不支持动画(因为它只显示了绘图的png图像,因此很清楚),因此解决方案可能是使用不同的后端。

如果在jupyter笔记本中:

  • 如果您想在笔记本中放置动画,请使用%matplotlib notebook
  • 如果您想让动画片使用%matplotlib inline 并且使用matplotlib 2.1或更高版本,您也可以使用< / p>

    IPython.display import HTML
    HTML(ani.to_jshtml())
    

    显示动画。

  • 如果您想将动画设置为自己的窗口,请使用%matplotlib tk

如果将代码作为脚本运行:

  • 在代码末尾添加plt.show()

如果在spyder中运行

  • 确保您没有在内置的IPython控制台中运行代码。而是在新的专用python控制台中运行它 enter image description here

答案 1 :(得分:1)

你最后错过了plt.show()。有了这条指令对我有用。