簡體   English   中英

如何將plot數據stream in 3D與matplotlib

[英]How to plot data stream in 3D with matplotlib

程序描述:我有一部手機,每 2 秒向服務器發送一次陀螺儀數據。 我每秒從服務器檢索數據。 我的程序的目的是讀取這個數據 stream 並用 matplotlib 做一個 3d 的可視化,它可以自動更新。

問題: plot 顯示空白 3D 空間,盡管獲得 x、y、z 坐標。 我一直在試圖找出原因和方式,但無濟於事。 非常感謝任何幫助。 提前致謝。

代碼:

from requests import get
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import numpy as np

ip_adress = 'http://xxxx'
port = ':xxxx'
endpoint = '/xxxx/'

ax = plt.axes(projection='3d')

def animate(i):
    collected_data = get(ip_adress + port + endpoint).json()['locators']['sensors'][0]
    x = np.linspace(0, collected_data['value0'], 100)
    y = np.linspace(0, collected_data['value1'], 100)
    z = np.linspace(0, collected_data['value2'], 100)
    ax.plot3D(x, y, z)
    plt.cla()

ani = FuncAnimation(plt.gcf(), animate, interval=1000)
plt.tight_layout()
plt.show()

Output:

在此處輸入圖像描述

問題是,對於每次迭代,您都添加一行並立即使用plt.clar()從 plot 中刪除它。

您需要做的是初始化一個空行,然后在animate function 中更新點:

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import numpy as np

ax = plt.axes(projection='3d')
line, = ax.plot3D([], [], [])

def animate(i):
    collected_data = get(ip_adress + port + endpoint).json()['locators']['sensors'][0]
    x = np.linspace(0, collected_data['value0'], 100)
    y = np.linspace(0, collected_data['value1'], 100)
    z = np.linspace(0, collected_data['value2'], 100)
    line.set_data_3d(x, y, z)

ani = FuncAnimation(plt.gcf(), animate, interval=1000)
plt.tight_layout()
plt.show()

暫無
暫無

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

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