我想在python中使用matplotlib创建一个动画。由于动画数据是两个参数(时间,身体数量)的函数,我有一个想法使用2 for循环。代码如下:
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中\站点包\ matplotlib \ backend_bases.py:2292: MatplotlibDeprecationWarning:使用默认事件循环直到函数 特定于此GUI实现warnings.warn(str, mplDeprecation)
这不是那么可怕但是在运行代码时,必须一起绘制的点(计数器i)被绘制成分开,因此它看起来像blinkig点(如果你知道我的意思)。
任何建议。我认为我接近解决方案,但仍然需要完成触摸才能使代码正常工作。我希望这可以按照我想象的方式完成,所以我不必用不同的方法解决问题。
答案 0 :(得分:3)
我已经解决了这个问题。解决方案是(如果有人需要的话):
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个小时来回答我自己的问题。
答案 1 :(得分: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)
中的数字来调整动画速度。