【问题标题】:matplotlib simple timed animation examplematplotlib 简单的定时动画示例
【发布时间】:2017-03-13 19:26:07
【问题描述】:

我正在为 matplotlib 寻找一个简单的定时动画示例。我在 matplotlib 库中找到了几个对 subplot 示例的引用,但我需要看到一些更基本的东西来为我的代码建模。

我在 x 轴上有 10 个离散值,在 y 轴上有一个连续值(想想直方图)。 x 和 y 之间的关系变化超过 500 个时间步。

这是一个数据集的可笑截断版本,只有 5 个类别和 5 个时间步长:

x = list(range(0, 5))
y = [[2.00000000e-01,   2.00000000e-01,   2.75495888e-02,
     1.40100625e-02,   2.00000000e-01],   [1.40100625e-02,
     3.85989938e-01,   6.20454173e-03,   1.74945474e-03,
     2.00000000e-01],   [1.74945474e-03,   3.98250545e-01,
     1.24956950e-03,   2.30229281e-04,   2.00000000e-01], 
     [2.30229281e-04,   3.99769771e-01,   2.26476892e-04,
     3.05018276e-05,   2.00000000e-01],   [3.05018276e-05,
     3.99969498e-01,   3.82455658e-05,   4.04459287e-06,
     2.00000000e-01]]

如何在 matplotlib 中为这样的数据集制作动画?

【问题讨论】:

  • 这里有两个非常基本的动画示例:stackoverflow.com/questions/42722691/…
  • 谢谢@IoBE,我想我想要一个简单的 TimedAnimation 演示,但是您是否建议通过 for 循环重绘每个图形而不使用动画?我不需要互动。
  • 在我对链接问题的回答中,有两种解决方案。我不推荐任何东西,因为我没有关于你想要做什么的任何信息。

标签: python-3.x animation matplotlib


【解决方案1】:

这是来自this question 的答案的示例,使用上面的数据。

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

x = list(range(0, 5))
y = [[2.00000000e-01,   2.00000000e-01,   2.75495888e-02,
     1.40100625e-02,   2.00000000e-01],   [1.40100625e-02,
     3.85989938e-01,   6.20454173e-03,   1.74945474e-03,
     2.00000000e-01],   [1.74945474e-03,   3.98250545e-01,
     1.24956950e-03,   2.30229281e-04,   2.00000000e-01], 
     [2.30229281e-04,   3.99769771e-01,   2.26476892e-04,
     3.05018276e-05,   2.00000000e-01],   [3.05018276e-05,
     3.99969498e-01,   3.82455658e-05,   4.04459287e-06,
     2.00000000e-01]]

fig, ax = plt.subplots()

sc = ax.scatter(x,y[0])
plt.ylim(-0.1,0.5)

def animate(i):
    sc.set_offsets(np.c_[x,y[i]])

ani = matplotlib.animation.FuncAnimation(fig, animate, 
                frames=len(y), interval=300, repeat=True) 

plt.show()

【讨论】:

  • 太棒了,谢谢,所以我根本不需要 TimedAnimation。因此 set_offsets 命令生成多个绘图,FuncAnimation 控制循环通过 i、计时和重复。如果有 100 个时间步怎么办?将frames = len(x) 更改为frames=len(y)
  • FuncAnimation is a TimedAnimation。是的,正确,len(x) 必须是 len(y) - 这很有效,因为在此示例中两者相同。
  • 我真的很想知道人们如何在答案下方写下“太棒了,谢谢”,接受它,最后upvote它。
  • 也许是因为他们知道点赞答案意味着什么。如果我接受了它不是多余的吗?为什么一个答案会得到支持而另一个没有?
  • 支持和接受是完全不同的两件事。接受意味着答案实际上回答了问题。接受答案的主要原因是表明问题已解决,因此未出现在未解决问题列表中。支持答案意味着答案很有用。您应该始终支持那些帮助您解决问题或您认为质量好或值得阅读的答案,而不仅仅是那些您自己的问题。写 awesome 以某种方式表明这个答案对你有帮助,所以为什么不点赞呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-09
  • 2011-08-06
  • 1970-01-01
相关资源
最近更新 更多