Мне нужно увеличить FPS Matplotlib FuncAnimation.Блиттинг - это один из способов, но он уничтожает стили и настройки фигуры.Как сохранить стиль при применении blit?
Я пытаюсь анимировать данные временных рядов.Я разработал класс, чтобы сделать это, используя matplotlib, но fps был ужасен.Затем я попытался отобразить несколько точек данных одновременно в кадре, чтобы ускорить рендеринг, это было лучше, но результаты снова были недостаточными.Наконец, я прочитал об использовании blit в FuncAnimation, и сюжет быстро рисовал, но все мои стили исчезли, когда я включил blit.Я новичок в matplotlib и уже потратил несколько дней на отладку всего, но эта проблема не поддается расшифровке.Если кто-то может найти проблему / предложить другие способы улучшить fps, я буду очень благодарен.
Полный код - https://github.com/namajain/EEGanalysis/blob/master/src/viz/emdVizWithBlit.py
Я также добавил укороченный код в посте, чтобы воспроизвести, как фигура вся черная вместо светло-синего цвета и стиля морской волны
import pandas import matplotlib.animation import matplotlib.pyplot as 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()
Ожидается
На самом деле все, что синяя область становится чернойс правильно отображаемыми осями