Построение графиков в реальном времени с использованием matplotlib не позволяет построить второй графикPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Построение графиков в реальном времени с использованием matplotlib не позволяет построить второй график

Сообщение Anonymous »

Я читаю данные из последовательного порта и на основе этого, построение графиков с использованием matplotlib. < /p>
Данные из последовательного порта находятся в формате:
ecg 9.89 4.5 123 . . end psd 2.1, 33.2 3.4, 92.10 . . end fft 2.1, 33.2 3.4, 92.10 . . end
Есть два разных сюжета. Один для ЭКГ и другой для FFT/PSD. Для ЭКГ она заставляет данные в режиме реального времени. Но для FFT/PSD он заплавляет данные в конце. Проблема, которую у меня возникает, заключается в том, что она заложена в ЭКГ, но показывает бланк FFT/PSD в первом чтении. Теперь, когда я отправляю второе чтение из последовательного порта, он показывает первый график FFT/PSD.
ниже мой код. Я добавил несколько журналов в plot_fft_psd. Он печатает третье !!!!!! в первой итерации. FFT_DATA и PSD_DATA также в порядке. Но не график графика, график черный/пуст.
def plot_fft_psd(fft_data, psd_data):
print("plotting fft and psd")
fig2, (ax_fft, ax_psd) = plt.subplots(2, 1, figsize=(10, 6), num='Figure 2 - FFT & PSD')

print("First!!!!!!")
fft_x, fft_y = zip(*fft_data)
ax_fft.plot(fft_x, fft_y, marker='o', color='blue')

print("Second!!!!!!")
psd_x, psd_y = zip(*psd_data)
ax_psd.plot(psd_x, psd_y, marker='o', color='orange')

plt.tight_layout()
plt.show()
plt.pause(0.01)
print("Third!!!!!!")

def plot_ecg(x_vals, y_vals, ax, line):
line.set_xdata(x_vals)
line.set_ydata(y_vals)

ax.set_xlim(0, 180)
ax.set_ylim(-150, 200)
plt.draw()

def serial_main():
ser = serial.Serial(SERIAL_PORT, BAUDRATE, timeout=1)

fig1, ecg_ax = plt.subplots(figsize=(12, 6), num='Figure 1 - ECG')

ecg_x_vals = []
ecg_y_vals = []
line, = ecg_ax.plot([], [], color='green')

count = 0
fft_data = []
psd_data = []
received_fft = False
received_psd = False

current_mode = None
buffer = []

while True:
line_data = ser.readline().decode('utf-8').strip()

print(f"> {line_data}")

if line_data in ("ecg", "fft", "psd"):
current_mode = line_data
buffer = []
continue

if line_data == "end":
if current_mode == "fft":
fft_data = buffer
received_fft = True

elif current_mode == "psd":
psd_data = buffer
received_psd = True

current_mode = None
buffer = []

try:
if current_mode == "ecg":
value = float(line_data)
ecg_x_vals.append(count * 0.01)
ecg_y_vals.append(value)

plot_ecg(ecg_x_vals, ecg_y_vals, ecg_ax, line)
plt.pause(0.001)
count += 1

elif current_mode in ("fft", "psd"):
x_str, y_str = line_data.split(",")
x = float(x_str.strip())
y = float(y_str.strip())
buffer.append((x, y))

except ValueError:
print(f"Invalid data skipped: {line_data}")
continue
except Exception as e:
print(f"Unexpected error: {e} for line: {line_data}")
continue

if received_fft and received_psd:
print("received fft and psd")
plot_fft_psd(fft_data, psd_data)
received_fft = False
received_psd = False

plt.pause(0.001)



Подробнее здесь: https://stackoverflow.com/questions/795 ... cond-graph
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Построение графиков в реальном времени с ftp-сервера с использованием matplotlib
    Anonymous » » в форуме Python
    0 Ответы
    46 Просмотры
    Последнее сообщение Anonymous
  • Построение графиков колчанов в matplotlib
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Построение графиков колчанов в matplotlib
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Построение графиков колчанов в matplotlib
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Как изменить код для построения графиков в реальном времени на основе графического интерфейса с помощью matplotlib?
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»