Анимация живых данных Matplotlib заканчивается память

#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’