Dhoni
Dhoni

Reputation: 1234

Plot serial port 3d points data on 3d coordinate system using python

I have searched for this in google, but found solutions for 2d points in real time.How can I achieve this for stream of 3d point.

Here I should be able to add new points to plot.

I tried this, its just plots series of data. How to update?

Upvotes: 0

Views: 1099

Answers (1)

Ed Smith
Ed Smith

Reputation: 13206

You could just plot in interactive mode, for example the following keeps adding new points,

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)

UPDATE: added example of labelling

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)

Upvotes: 1

Related Questions