我想在python中用matplotlib創建一個動畫。由於動畫數據是兩個參數(時間,物體數量)的函數,我有一個想法使用2 for循環。代碼如下:matplotlib動畫情節雙循環
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: Using default event loop until function specific to this GUI is implemented warnings.warn(str, mplDeprecation)
這不是那麼可怕,但運行代碼的點的時候,將有被繪製在一起(計數器i)被分開繪製,所以它看起來像blinkig點(如果你知道我的意思)。
有任何建議。我認爲我接近解決方案,但仍然需要用於代碼工作的整理工具。我希望這可以按照我想象的方式完成,所以我不必用不同的方法解決問題。
你必須對每個i_t使用'show'命令。請記住,你用代碼將所有東西繪製在一個(!)圖中。也許你應該檢查matplotlib食譜動畫: http://www.scipy.org/Cookbook/Matplotlib/Animations 或者如果你想要一部電影,(可能是),檢查這個: http://debtechandstuff.blogspot .de/2009/10/created-video-of-3d-graph-plotting.html 一般而言,您必須自行繪製每個框架,然後將動畫製作出來。一個動畫的.gif很容易做到。 – Faultier
您可以忽略該警告。 – tacaswell
如果你只是用'set_data'替換數據,它會運行得更好,而不是每幀都吹走整個軸。 – tacaswell