matplotlib中的双for循环动画绘制

2024-06-09 07:12:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用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)和一个窗口中的所有实体(计数器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: Using default event loop until function specific to this GUI is implemented warnings.warn(str, mplDeprecation)

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

有什么建议。我想我已经接近解决方案了,但是仍然需要finishig touch来让代码工作。我希望这能像我想象的那样完成,这样我就不用用不同的方法来解决问题了。


Tags: 代码inimportformatplotlib时间range动画
2条回答

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

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个小时来回答我自己的问题。

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

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)中的数字来调整动画速度。

相关问题 更多 >