Настройки рисунка удаляются после того, как я установил blit в matplotlib FuncAnimation - PullRequest
0 голосов
/ 19 февраля 2019

Мне нужно увеличить 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()

Ожидается

Image of emdViz

На самом деле все, что синяя область становится чернойс правильно отображаемыми осями enter image description here

...