[英]matplotlib animated line plot stays empty
我試圖按照此處的基本動畫教程進行修改,以使其顯示已計算出的數據集,而不是每幀都對函數進行求值,但是卻遇到了麻煩。 我的數據集包含隨時間變化的XY坐標,它們都包含在satxpos
和satypos
列表中,我試圖創建一個動畫,以便它跟蹤從數據集的開頭到結尾的一條線,每0.1秒顯示1個新點。 對我要去哪里有幫助嗎?
from matplotlib import pyplot as plt
from matplotlib import animation
import numpy as np
Code here creates satxpos and satypos as lists
fig = plt.figure()
ax = plt.axes(xlim=(-1e7,1e7), ylim = (-1e7,1e7))
line, = ax.plot([], [], lw=2)
def init():
line.set_data([], [])
return line,
def animate(i):
line.set_data(satxpos[i], satypos[i])
return line,
anim = animation.FuncAnimation(fig, animate, init_func=init,
frames = len(satxpos), interval = 1, blit=True)
編輯:代碼運行無錯誤,但是生成一個空白的繪圖窗口,其中沒有顯示點/線,也沒有動畫。 數據集已正確生成,並且在靜態圖中的視圖良好。
為了“跟蹤從數據集的開始到末尾的一行”,您將對數組進行索引以在每個時間步長包含一個以上元素:
line.set_data(satxpos[:i], satypos[:i])
(注意:
!)
代碼中的所有其他內容看起來都很好,因此通過上述操作,您應該獲得並擴展了線圖。 然后,您可能希望將interval
設置為大於1的值,因為這將意味着1毫秒的時間步長(可能有點太快了)。 我猜想使用interval = 40
可能是一個不錯的開始。
您的代碼看起來正確! 只要satxpos和satypos都已正確配置和初始化,我相信其他所有內容都是有效的!
您未在問題中顯示的代碼的一部分是對anim.save()
和plt.show()
函數的調用,這對於代碼的工作都是必不可少的(根據您共享的教程!)
因此,您需要添加以下內容:
anim.save('basic_animation.mp4', fps=30, extra_args=['-vcodec', 'libx264'])
plt.show()
到代碼的末尾以創建動畫(並假定顯示它)!
希望能幫助到你!
我看到您提到“生成satxpos和satypos的部分確實創建了有效的數據集。我可以將它們視為靜態圖很好”。 但是我的猜測仍然是問題出在您的satxpos
和satypos
。
解決問題的一種方法是用line.set_data(satxpos[i], satypos[i])
替換兩個函數和動畫代碼。 設置i
為0
, 1
,...,看看你能看到的情節。 如果不是,則您的satxpos
和satypos
的有效性不如您所聲稱的那樣。
例如,有效的satxpos
和satypos
可能像這樣:
x = np.array([np.linspace(-1e7, 1e7, 1000)])
i = 200
satxpos = x.repeat(i, axis=0)
satypos = np.sin(2 * np.pi * (satxpos - 0.01 * np.arange(i).reshape(-1, 1).repeat(satxpos.shape[1], axis=1)))
satypos *= 1e7 / 2
這可以與您提供的代碼一起使用,從而表明您向我們展示的代碼很好。
如果您的satxpos
和satypos
只是np.linespace
,則動畫循環將僅通過(satxpos[i], satypos[i])
獲得一個點,並且如果沒有諸如marker='o'
類的設置,您將看不到該點。 marker='o'
。 因此,您在動畫中看不到任何東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.