Как передать аргументы в animation.FuncAnimation() для построения гистограммы на графике поверхности
Я работаю над проектом, в котором мне нужно отобразить данные с последовательного монитора в python, который находится в измерении 4x4, и график должен изменяться во времени, так как значение датчика изменяется
Я получаю только первое значение, измеренное датчиком, и полученные значения не обновляются на plot.it обновляется после закрытия графика, автоматически появляется новый график с обновленными значениями от датчика, который он продолжает повторять каждый раз, чтобы получить новый значения, которые я должен продолжать закрывать
# plot 3d bar chart on python using serial data
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as p3
import matplotlib.animation as animation
import serial
from matplotlib import style
import numpy as np
style.use('classic')
dataarrray = []
data = []
cnt = 0
arduinoData = serial.Serial('COM5', 9600)
def update_bars(num, bars):
# print(data)
for i in range(0, 16):
bars[i] = ax.bar3d(xpos[i], ypos[i], zpos[i], dx[i], dy[i], dz[i])
return bars
while True:
while (arduinoData.inWaiting() == 0): # Wait here until there is data
pass
arduinoString = arduinoData.readline().decode().strip('\r\n')
temp = float(arduinoString)
dataarrray.append(temp)
cnt += 1
data.clear()
if(len(dataarrray) >= 17):
data = dataarrray[0:16]
del dataarrray[0:16]
if(len(data) == 16):
print(data)
fig = plt.figure()
ax = p3.Axes3D(fig)
xpos = [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4]
ypos = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
zpos = np.zeros(16)
dx = np.ones(16)
dy = np.ones(16)
dz = data
# add bars
bars = []
for i in range(16):
bars.append(ax.bar3d(xpos[i], ypos[i],
zpos[i], dx[i], dy[i], dz[i]))
ax.set_title('3D bars')
ax.set_xlabel('x axis')
ax.set_ylabel('y axis')
ax.set_zlabel('z axis')
line_ani = animation.FuncAnimation(fig, update_bars, 20, fargs=[
bars], interval=100, blit=False)
plt.show()