我試圖使用matplotlib
中的animation
函數生成實時數據圖。我指的是來自以下鏈接的本教程以獲得我的支持:Realtime Plotting in MatPlotLib使用matplotlib和更新文本文件生成實時圖
正在讀取的data.txt
文件正在每秒更新一次新數據。進入的數據如下所示:[0.0263671875, 0.03515625, 1.0087890625][0.01171875, 0.0146484375, 0.4404296875][0.01171875, 0.0146484375, 0.4404296875]
...等等。
animate函數的前三行的每個陣列中提取所述第三元件:
data = pd.read_csv("C:\\Users\\Desktop\\data.txt", sep="\[|\]\[|\]",engine = 'python', header = None)
data = data.iloc[0]
data = data.astype(str).apply(lambda x: x.split(',')[-1]).astype(float)
data.pop(0)
我在Jupyter筆記本驗證了這個代碼和輸出如下所示(並且什麼我尋找) :
我的第一個挑戰來自於我試圖實時生成圖形。我的數據沒有x軸(時間)。所以,我的第一個障礙是在數據流更新時生成一個虛擬的x軸。上述鏈接教程中的代碼被用作模板。我將指出我爲了特定目的而努力修改的領域。
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
def animate(i):
data = pd.read_csv("C:\\Users\\Desktop\\data.txt", sep="\[|\]\[|\]",engine = 'python', header = None)
data = data.iloc[0]
data = data.astype(str).apply(lambda x: x.split(',')[-1]).astype(float)
data.pop(0)
xar = []
yar = []
for eachLine in data:
if len(eachLine)>1:
x,y = eachLine.split(',')
xar.append(int(x))
yar.append(int(y))
ax1.clear()
ax1.plot(xar,yar)
ani = animation.FuncAnimation(fig, animate, interval=1000)
plt.show()
除了人爲地製造x軸的號碼,這樣我可以創建劇情,我還需要修改for循環:
xar = []
yar = []
for eachLine in data:
if len(eachLine)>1:
x,y = eachLine.split(',')
xar.append(int(x))
yar.append(int(y))
在鏈接提供的例子,他們的數據流有一個x
和y
數據點,由一列分隔。我擁有的數據流只是一個值。
我該如何修改我的代碼(1)添加一個合適的x軸以便能夠繪製和(2)正確地通過for循環以便將值附加到xar
和yar
以繪製圖實時。
編輯1 我試過以下,但它不起作用,需要一些幫助......但這是我的第一槍。我得到的錯誤:
if len(eachLine)>1:
TypeError: object of type 'numpy.float64' has no len()
我的代碼如下:
def animate(i):
data = pd.read_csv("C:\\Users\\Desktop\\data.txt", sep="\[|\]\[|\]",engine = 'python', header = None)
data = data.iloc[0]
data = data.astype(str).apply(lambda x: x.split(',')[-1]).astype(float)
data.pop(0)
xar = []
yar = []
for j in range(len(data)):
xar.append(j)
for k in range(len(data)):
yar.append(data.iloc[k])
for eachLine in data:
if len(eachLine)>1:
x,y = eachLine.split('')
xar.append(int(x))
yar.append(int(y))
ax1.clear()
ax1.plot(xar,yar)
ani = animation.FuncAnimation(fig, animate, interval=1)
plt.show()
謝謝!
代碼看起來完全沒從數據幀繪製列。我根本不理解這個問題。 – ImportanceOfBeingErnest
問題是進入的數據流看起來像Jupyter筆記本的輸出內容。它只有我的「y值」。我目前沒有任何x值能夠建立我的情節。 – Gary
我認爲你的問題太重視你不想使用的例子,而不是你實際使用的例子。無論如何,你可能想提供一個[mcve]的問題。 – ImportanceOfBeingErnest