如何使用 matplotlib 绘制 3D 数据流
How to plot data stream in 3D with matplotlib
程序说明:我有一个phone每2秒向服务器发送一次陀螺仪数据。我每秒从服务器检索数据。我的程序的目的是读取此数据流并使用可以自动更新的 matplotlib 进行 3d 可视化。
问题: 尽管获得了 x、y、z 坐标,绘图仍显示空白 3D space。我一直在试图找出原因和方式,但无济于事。非常感谢任何帮助。提前致谢。
代码:
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()
输出:
问题是,对于每次迭代,您都添加一条线并立即使用 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()
程序说明:我有一个phone每2秒向服务器发送一次陀螺仪数据。我每秒从服务器检索数据。我的程序的目的是读取此数据流并使用可以自动更新的 matplotlib 进行 3d 可视化。
问题: 尽管获得了 x、y、z 坐标,绘图仍显示空白 3D space。我一直在试图找出原因和方式,但无济于事。非常感谢任何帮助。提前致谢。
代码:
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()
输出:
问题是,对于每次迭代,您都添加一条线并立即使用 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()