【问题标题】:animation plot in matplotlib with double for loopmatplotlib 中带有双 for 循环的动画图
【发布时间】:2013-06-03 14:29:59
【问题描述】:

我想在 python 中使用 matplotlib 创建一个动画。由于动画数据是两个参数(时间、物体数量)的函数,我想到了使用 2 个循环。代码如下:

import time
import matplotlib as mpl
from matplotlib import pyplot as plt
from matplotlib import pylab as plb

#   set up figure for plotting:
fig = plt.figure()
ax = fig.add_subplot(111)

#    plot limits
ax.set_xlim(-(max(q0) + bodies[-1].L), +(max(q0) + bodies[-1].L))
ax.set_ylim(-(max(q0) + bodies[-1].L), +(max(q0) + bodies[-1].L))

#    colors
colors = ['b', 'g', 'c']


for i_t in range(0, np.shape(t)[1]):    #t is an one column matrix
    for i in range(0, N):
        ax.plot(x_matrix[i_t, i], y_matrix[i_t, i], 's', color=colors[i])
    plt.draw()
plt.show()

问题是代码为我生成了一个情节,但所有动画点。我想在一个窗口中为一个时间值(计数器 i_t)和所有物体(计数器 i)绘制动画作为电影,以便在下一个时间步删除上一个情节。

我已将您建议的代码更改为:

for i_t in range(0, np.shape(t)[1]):
    for i in range(0, N):
        ax.clear()
        ax.plot(x_matrix[i_t, i], y_matrix[i_t, i], 's', color=colors[i])
        plt.pause(0.001)
plt.draw()

然后我得到一个错误:

C:\Python27\lib\site-packages\matplotlib\backend_bases.py:2292: MatplotlibDeprecationWarning:使用默认事件循环直到函数 特定于这个 GUI 实现了 warnings.warn(str, mpl弃用)

这并不可怕,但是在运行代码时,必须将必须绘制在一起的点(计数器 i)分开绘制,因此看起来像闪烁点(如果你知道我的意思的话)。

任何建议。我想我已经接近解决方案了,但仍然需要完成操作才能使代码正常工作。我希望这可以按照我想象的方式完成,这样我就不必用不同的方法解决问题了。

【问题讨论】:

  • 你必须对我猜的每个 i_t 使用show 命令。请记住,您使用代码将所有内容绘制在一个(!)图中。也许您应该查看 matplotlib 动画食谱:scipy.org/Cookbook/Matplotlib/Animations 或者如果您想要一部电影,(可能是的),请查看:debtechandstuff.blogspot.de/2009/10/… 通常,您必须自己绘制每一帧,然后从中制作动画.制作 .gif 动画很容易。
  • 您可以忽略该警告。
  • 如果你只是用set_data替换数据,它会运行得更好,而不是每帧都把整个轴都吹走。

标签: python animation for-loop matplotlib


【解决方案1】:

我已经解决了这个问题。解决方案是(如果有人需要的话):

for i_t in range(0, np.shape(t)[1]):
    ax.clear()
    plt.hold(True)
    #    plot limits
    ax.set_xlim(-(max(q0) + bodies[-1].L), +(max(q0) + bodies[-1].L))
    ax.set_ylim(-(max(q0) + bodies[-1].L), +(max(q0) + bodies[-1].L))
    for i in range(0, N):
        ax.plot(x_matrix[i_t, i], y_matrix[i_t, i], 's', color=colors[0, i])

    plt.pause(0.0001)

我会早点发帖,但作为一个新用户,我不得不等待 8 个小时才能回答我自己的问题。

【讨论】:

  • 我试过plt.pause()。问题是我完成情节后它退出了。我该如何避免这种情况?
  • 尝试将 plt.pause() 中的值从 0.0001 更改为 0.1? plt.pause() 是否缩进为内部(第二个)for 循环?
【解决方案2】:

将代码的最后一部分更改为:

for i_t in range(np.shape(t)[1]):    #t is an one column matrix
    for i in range(N):
        ax.clear()
        ax.plot(x_matrix[i_t, i], y_matrix[i_t, i], 's', color=colors[i])
        plt.pause(0.001)
# eof

通过更改plt.pause(0.001)中的数字来调整动画速度。

【讨论】:

    猜你喜欢
    • 2016-01-16
    • 2022-01-23
    • 1970-01-01
    • 2016-03-16
    • 2014-12-09
    • 2018-01-08
    • 2014-03-23
    • 1970-01-01
    相关资源
    最近更新 更多