我需要提高matplotlib FuncAnimation的FPS。划线是一种方法,但它破坏了图形样式和自定义。在应用blit时如何保留样式?
我正在尝试制作时间序列数据的动画。我开发了一个类来使用matplotlib做到这一点,但是fps太可怕了。 然后,我尝试在一个帧中一次绘制多个数据点,以加快渲染速度,效果更好,但结果仍然不足。 最终,我读到了有关在FuncAnimation中使用blit的信息,该图绘制得很快,但是当我打开blit时,我的所有样式都消失了。 我是matplotlib的新手,已经花了几天时间调试所有东西,但是这个问题是无法理解的。 如果有人能找到问题/建议其他方法来改善fps,我将不胜感激。
完整代码-https://github.com/namajain/EEGanalysis/blob/master/src/viz/emdVizWithBlit.py
我还在帖子中添加了一个修整后的代码,以重现图形是全黑的,而不是浅蓝色和淡淡的风格
进口熊猫 导入matplotlib.animation 导入matplotlib.pyplot作为plt
class emdVizBlit():
def __init__(self, rd=None, csv=None, ncomp=5, fplot=20, xran=128, fa=.8):
self.rd=[1]*100000
self.nComp = ncomp
self.nPoints = fplot
self.xRange = xran
self.cMap = plt.get_cmap('inferno').colors
self.freqAdjust = fa
def emdPlot(self):
fig, ax = plt.subplots(nrows=self.nComp + 2, sharex=True, sharey=True)
fig.set_facecolor('xkcd:light blue')
fig.set_size_inches(19.3, 10.91)
mng = plt.get_current_fig_manager()
mng.window.showMaximized()
fig.tight_layout()
plt.style.use('seaborn-whitegrid')
def getColor(j):
return self.cMap[(len(self.cMap) - 1) // (self.nComp + 2) * (j)]
def getLine(axe):
ln, = axe.plot([], [], color=getColor(0), animated=True)
return ln
lines = [getLine(axe) for axe in ax]
anim_running = True
def absanimate(i):
nonlocal ax
# if isRedrawIter(i):
# redrawPlotOutline(i)
# plotBaseSignal(i)
# plotImfSignal(i)
# plotResidueSignal(i)
return lines
anim = matplotlib.animation.FuncAnimation(fig, absanimate, frames=len(self.rd) // self.nPoints,
interval=self.nPoints / 256 * self.freqAdjust,
repeat=False, blit=True)
plt.show()
if __name__ == '__main__':
ev = emdVizBlit()
ev.emdPlot()
预期