我使用带有FuncAnimation的pyplot 2.0将串行数据流式传输到不断更新的数字。
要使FuncAnimation正常工作,您需要图, Func (每帧调用的功能)和帧(数据源)传递func和动画的每一帧相当简单,我认为它确实以我期望的方式制作动画。
然而,即使我将 blit 标志设置为优化绘图并仅渲染新数据点,该图仍会继续摧毁内存,直到它崩溃Raspberry Pi。
以下是代码:
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# Setup plotting, one figure and two subplots
fig, (ax1, ax2) = plt.subplots(2,1)#,sharex=True)
g_line = ax1.plot([],[],'g')
r_line = ax1.plot([],[],'r')
lines = []
# Add each line to o ur tuples of lines to be plotted
lines.extend(g_line)
lines.extend(r_line)
# Data plotting function, this is call from the animation
# Each data element is in the data list being returned below
def plot_data(data):
x1 = data[0]; y1 = data[1];
x2 = data[2]; y2 = data[3];
lines[0].set_data(x1,y1) # Audio - green
lines[1].set_data(x2,y2) # Audio thresh - red
return tuple(lines)
def data_gen():
my_list = []
my_list2 = []
# Main infinite loop for processing of serial data
while True:
# Grab input RX serial data
(my_list, my_list2) = readUART(serReader)
yield my_list, my_list2
#end while
ani = animation.FuncAnimation(fig, plot_data, data_gen, interval=1, blit=True)
plt.show()
我试图在每次迭代后清除图形,但这会严重降低渲染速度。
是否有一些记忆,即使绘图完全填满图形并离开屏幕,我也不知道每次绘图时都会抓住它?
注意 - 我在整个程序中运行了一个内存分析器,减去了绘图,只是在while TRUE循环上运行了,内存在我让它一直移动超过55mb时运行