Я пытаюсь построить график рассеяния для датчика вибрации, с которым я работаю в пределах оси 3d, используя пакет анимации в matplotlib.
Ниже указан код
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.animation as animation
import serial
seru = serial.Serial('COM6', 115200)
xyz = []
def update_lines(num):
rmsX,rmsY,rmsZ = vib_sense()
xyz = np.array([[rmsX],[rmsY],[rmsZ]]) # replace this line with code to get data from serial line
print(xyz)
text.set_text("{:d}: [{:.0f},{:.0f},{:.0f}]".format(num,rmsX,rmsY,rmsZ)) # for debugging
'''
x.append(rmsX)
y.append(rmsY)
z.append(rmsZ)
'''
graph._offsets3d = (xyz)
return graph,
def vib_sense():
while True:
s = seru.read(54)
if(s[0] == 126):
if(s[15] == 127):
if(s[22]== 8):
rms_x = ((s[24]*65536)+(s[25]*256)+s[26])/1000
rms_y = ((s[27]*65536)+(s[28]*256)+s[29])/1000
rms_z = ((s[30]*65536)+(s[31]*256)+s[32])/1000
return rms_x,rms_y,rms_z
x = [0]
y = [0]
z = [0]
fig = plt.figure(figsize=(5, 5))
ax = fig.add_subplot(111, projection="3d")
graph = ax.scatter(x, y, z, color='orange')
text = fig.text(0, 1, "TEXT", va='top') # for debugging
ax.set_xlim3d(-255, 255)
ax.set_ylim3d(-255, 255)
ax.set_zlim3d(-255, 255)
# Creating the Animation object
ani = animation.FuncAnimation(fig, update_lines, frames=200, interval=50, blit=False)
plt.show()
результат будет следующим:
[[ 0.711]
[20.309]
[ 2.369]]
[[ 0.698]
[20.338]
[ 2.275]]
[[ 0.655]
[20.36 ]
[ 2.407]]
[[ 0.751]
[20.328]
[ 2.346]]
[[ 0.757]
[20.312]
[ 2.424]]
[[ 0.705]
[20.345]
[ 2.631]]
[[ 0.679]
[20.306]
[ 2.302]]
И по оси 3d я могу видеть только один параметр за раз
![enter image description here](https://i.stack.imgur.com/nCscY.png)
Любые предложения и советы по одновременному мониторингу всех значений на экране трехмерной оси будут очень полезны, и в какой-то момент график не отвечает, и работает очень любое предложение, которое также будет очень полезно