簡體   English   中英

matplotlib動畫線條圖保持空白

[英]matplotlib animated line plot stays empty

我試圖按照此處的基本動畫教程進行修改,以使其顯示已計算出的數據集,而不是每幀都對函數進行求值,但是卻遇到了麻煩。 我的數據集包含隨時間變化的XY坐標,它們都包含在satxpossatypos列表中,我試圖創建一個動畫,以便它跟蹤從數據集的開頭到結尾的一條線,每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()

到代碼的末尾以創建動畫(並假定顯示它)!

希望能幫助到你!

來源-Matplotlib動畫教程

我看到您提到“生成satxpos和satypos的部分確實創建了有效的數據集。我可以將它們視為靜態圖很好”。 但是我的猜測仍然是問題出在您的satxpossatypos

解決問題的一種方法是用line.set_data(satxpos[i], satypos[i])替換兩個函數和動畫代碼。 設置i01 ,...,看看你能看到的情節。 如果不是,則您的satxpossatypos的有效性不如您所聲稱的那樣。

例如,有效的satxpossatypos可能像這樣:

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

這可以與您提供的代碼一起使用,從而表明您向我們展示的代碼很好。

編輯以回應評論:

如果您的satxpossatypos只是np.linespace ,則動畫循環將僅通過(satxpos[i], satypos[i])獲得一個點,並且如果沒有諸如marker='o'類的設置,您將看不到該點。 marker='o' 因此,您在動畫中看不到任何東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM