使用python在三维坐标系上绘制串口三维点数据

使用python在三维坐标系上绘制串口三维点数据,python,matplotlib,plot,3d,Python,Matplotlib,Plot,3d,我在谷歌上搜索过这个,但找到了2d点的实时解决方案。我怎样才能在3d点流中实现这一点呢 在这里,我应该能够添加新的点到绘图 我试过了,它只是绘制了一系列数据。如何更新?您可以在交互模式下打印,例如,以下内容不断添加新点 from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.add_subplot(111, pro

我在谷歌上搜索过这个,但找到了2d点的实时解决方案。我怎样才能在3d点流中实现这一点呢

在这里,我应该能够添加新的点到绘图


我试过了,它只是绘制了一系列数据。如何更新?

您可以在交互模式下打印,例如,以下内容不断添加新点

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

plt.ion()
plt.show()

x = np.linspace(0.,np.pi*4.,100)
ax.set_xlim([0.,13.])
ax.set_ylim([-1.5,1.5])
ax.set_zlim([-1.5,1.5])
for i in x:
    ax.scatter(i, np.sin(i), np.cos(i))
    print(i)
    plt.pause(0.01)
更新:添加了标签示例

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

plt.ion()
plt.show()

lsp = np.linspace(0.,np.pi*4.,100)
ax.set_xlim([0.,13.])
ax.set_ylim([-1.5,1.5])
ax.set_zlim([-1.5,1.5])
for i, x in enumerate(lsp):
    y = np.sin(x)
    z = np.cos(x)
    ax.scatter(x, y, z)
    if i%10 == 0:
        ax.text(x, y, z, str(np.round(x,3))+", "
                        +str(np.round(y,3))+", "
                        +str(np.round(z,3)))
    plt.pause(0.01)

它的工作原理(谢谢)。是否有一种方法可以在悬停或单击点时显示点的三维数据。目前在图的底部显示了一些错误。奇怪的是,你得到了一个错误,对我来说可以正常工作(
matplotlib 1.4.3
),但我认为你不能很容易地找出你在3D中选择的点。。。您可以将
ax.text
添加到标签点,我编辑了示例,以每10个点坐标绘制一次,但它很快就会变得混乱。绘制速度非常慢。这不是实时的。如何优化它以实现实时性。我每0.02秒得到一个新的点@Ed SmithYeah,matplotlib通常很慢(主要关注发布数据),只有将所有点绘制为一个集合(许多点一起)时,
scatter
才会很快。单独进行这项工作永远不会很快,您可以将点集分组并间歇性地绘制所有这些点?动画速度可能会更快,可能是使用了blitting(请参见),但plot似乎没有一种在3D中设置数据的方法。理想情况下,您可以附加到一个集合中,但似乎不是用于此的接口。是否有其他专门为实时设计的绘图库。