matplotlib 如何在3D中绘制数据流

rkttyhzu  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(144)

**程序说明:**我有一个手机,每2秒向服务器发送一次陀螺仪数据。每一秒我都从服务器上检索数据。我的程序的目的是读取这个数据流,并使用matplotlib进行3d可视化,它可以自动更新。
**问题:**虽然获取x、y、z坐标,但图显示空白3D空间。我一直想弄明白为什么怎么会这样,但没有用.会很感激你的帮助。先谢谢你了。
验证码:

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()

输出:

epfja78i

epfja78i1#

问题是,对于每次迭代,您都要添加一条线,并立即使用plt.clar()将其从图中删除。
你需要做的是初始化一个空行,然后在animate函数中更新点:

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()

相关问题