Отрисовка графиков в реальном времени в приложении kivy
В приложении есть функция подключения по bluetooth к усилителю биопотенциалов. Подключение уже настроено. При запуске отображаются 4 пустых графика (то есть просто 4 набора осей), вот их код:
# Макет для графиков ЭЭГ
graph_layout = BoxLayout(orientation='vertical', size=(500, 1600))
layout.add_widget(graph_layout)
self.fig = plt.figure(figsize=(10, 25), facecolor='grey', layout='tight')
self.canvas = FigureCanvas(self.fig)
graph_layout.add_widget(self.canvas)
self.reset_graphs()
функция обновления до пустых осей:
def reset_graphs(self):
self.fig.clear()
for i in range(self.channels):
self.ax = self.fig.add_subplot(self.channels, 1, i + 1)
self.ax.set_ylim([-20, 20])
self.ax.set_xticklabels([])
self.ax.yaxis.grid(True)
self.ax.plot([], [], color='red')
self.canvas.draw_idle()
От усилителя приложение должно получать массив данных (запись ЭЭГ в реальном времени). Когда сопряжение установлено, надо нажать на кнопку "старт", которая вызывает следующую функцию в корректности которой я не уверена
def on_st(self, instance):
op = -1
omission_count = 0
while not BluetoothPopup().err:
try:
self.chunk_data = self.socket.recv(1024)
i = 0
while i < len(self.chunk_data):
if (op == -1) and (self.chunk_data[i] & 128) == 128:
self.data = []
op = 0
omission_count = 3
elif op == 0:
omission_count -= 1
if omission_count == 0:
op = 1
elif op == 1:
self.data.append(self.chunk_data[i])
if len(self.data) == self.len_data:
data = []
for j in range(self.channels):
data.append(((self.data[2 * j + 1] + (self.data[2 * j] << 7)) - 2048) * 0.10417)
self.buff.append(data)
for k in range(0, self.channels):
self.data_queue[k].append(data[k])
op = -1
self.data.extend(data)
i = i + 1
except:
self.error = True
self.draw_plots()
BluetoothPopup() это класс, наследованный от kivy popup, внутри которого осуществляется подключение к усилителю. draw_plots() это функция отрисовки графиков в тех пустых осях. Их 4 потому что каналов записи ЭЭГ у усилителя тоже 4. Когда линия доходит до конца доступного места, она стирается и начинается сначала. Трудность возникает как раз в этом, в отображении получаемых от усилителя данных в виде графиков. У меня есть некоторые наброски, но пока они не работают, если будут нужны, напишите, и я дополню ими вопрос.