#python #matplotlib #animation #ram
Вопрос:
Я использую Raspberry Pi для построения данных в реальном времени из последовательного, но в конечном итоге у меня заканчивается память. Я не уверен, могу ли/как я могу закрыть рисунок, но у меня все еще есть отображение данных в реальном времени.
Можно ли было бы создавать и закрывать новую фигуру с каждой анимацией?
Мой код на данный момент:
import serial import matplotlib # Force matplotlib to not use any Xwindows backend. matplotlib.use('TkAgg') #comment out for debugging import matplotlib.pyplot as plt import matplotlib.animation as animation import numpy as np import gc # Create figure for plotting fig = plt.figure() xs = [] ysAC = [] ysDC = [] ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=1) ser.flush() # This function is called periodically from FuncAnimation def animate(i, xs, ysAC, ysDC): values = getValues() wAC = values[1] wDC = values[2] # Add x and y to lists xs.append(i) ysAC.append(wAC) ysDC.append(wDC) # Limit x and y lists to 10 items xs = ['T-9','T-8','T-7','T-6','T-5','T-4','T-3','T-2','T-1','Now'] ysDC = ysDC[-10:] ysAC = ysAC[-10:] # Draw x and y lists axRT1.clear() if len(ysDC) == 10: lineAC, = axRT1.plot(xs, ysAC, 'b:', label='Mains', linewidth = 4) lineDC, = axRT1.plot(xs, ysDC, 'g--', label='Solar', linewidth = 4) gc.collect() #fig.clf() #plt.close() def getValues(): if ser.in_waiting gt; 0: line = ser.readline().decode('utf-8').rstrip() return list(line.split(",")) # Set up plot to call animate() function periodically ani = animation.FuncAnimation(fig, animate, fargs=(xs, ysAC, ysDC), interval=1000, blit=False) plt.get_current_fig_manager().full_screen_toggle() plt.ioff() plt.show() plt.draw()
Комментарии:
1. Не стройте заговор каждый раз. Измените данные x и y существующего графика.
2. @JodyKlymak спасибо тебе. Я не могу понять, почему set_data возвращает ошибку атрибута: объект ‘NoneType’ не имеет атрибута ‘update’