【问题标题】:Matplotlib funcAnimation does not open/show plotMatplotlib funcAnimation 无法打开/显示绘图
【发布时间】:2017-03-26 06:07:28
【问题描述】:

我正在尝试学习如何使用 matplotlib 内置的 funcAnimation 类为绘图设置动画。对于这个例子,我只想生成一个随机分布的正态值的 2D 散点图,并在每次更新点时向图中添加一个点(动画显示的点)。示例代码如下:

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

plt.ion()
fig, ax = plt.subplots()
scat = ax.scatter([],[])
scat.axes.axis([-5, 5, -5, 5])

def update(point):
    array = scat.get_offsets()
    array = np.append(array, point)
    scat.set_offsets(array)
    return scat

def data_gen():
    for _ in range(0,100):
        point = np.random.normal(0, 1, 2)
        yield point

ani = animation.FuncAnimation(fig, update, data_gen, interval=25, blit=False)
plt.show()

当我运行这段代码时,什么也没有发生。终端搅动了几秒钟,然后什么也没有发生。

我使用它作为我的指南:http://matplotlib.org/examples/animation/animate_decay.html,如果我使用线图而不是散点图(基本上只是替换了在本示例的生成器中生成点的方式),它“工作”到现在因为它生成数据并更新绘图。但这不是我想要的显示,我想看到散点图上出现的点。要使用散点图,我不需要使用 set_data,因为这不是散点图的有效方法;所以我正在使用我在这个例子中看到的 np.append() 方法: Dynamically updating plot in matplotlib

所以我的问题是,我在这段代码中做错了什么导致动画不显示?

编辑:我刚刚尝试/发现如果我添加: mywriter = 动画.FFMpegWriter(fps=60) ani.save('myanimation.mp4',writer=mywriter) 它确实产生了一个包含动画的 mp4,我只是无法让它在代码运行时动态显示。因此,如果您能够诊断它,请专注于该问题。谢谢。

【问题讨论】:

  • 如果我删除plt.ion() 行,您的代码对我来说很好。你有什么需要吗?通常ion() 仅在 ipython 中绘图时使用,我不确定这是否是您想要的。
  • 谢谢!我只是在看示例代码,他们都有。所以我认为这是动画的必要条件。这解决了它!

标签: python-2.7 animation matplotlib generator


【解决方案1】:

为了将来参考,@ImportanceOfBeingErnest 指出 plot.ion() 不是必需的,并且特定于在 ipython 中绘图。删除它可以解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-08
    • 2020-11-06
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    相关资源
    最近更新 更多