Por que o Matplotlib é tão lento?
Ao avaliar as bibliotecas de plotagem do Python, é importante considerar o desempenho. Matplotlib, uma biblioteca amplamente utilizada, pode parecer lenta, levantando questões sobre como acelerá-la ou explorar opções alternativas. Vamos nos aprofundar no problema e explorar possíveis soluções.
O exemplo fornecido mostra um gráfico com vários subtramas e atualizações de dados. Com Matplotlib, esse processo envolve redesenhar tudo, incluindo limites de eixos e rótulos de ticks, resultando em desempenho lento.
Compreendendo os gargalos
Dois fatores principais contribuem para a lentidão:
Otimizando com Blitting
Para resolver esses gargalos , considere usar blitting. Blitting envolve atualizar apenas partes específicas da figura, reduzindo o tempo de renderização. No entanto, o código específico do back-end é necessário para uma implementação eficiente, o que pode exigir a incorporação de gráficos Matplotlib em um kit de ferramentas GUI. técnica pode fornecer desempenho razoável sem dependência de back-end:
Capturar plano de fundo:
Antes da animação, capture o plano de fundo de cada subtrama para restaurar mais tarde.Módulo de animação
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 2*np.pi, 0.1)
y = np.sin(x)
fig, axes = plt.subplots(nrows=6)
styles = ['r-', 'g-', 'y-', 'm-', 'k-', 'c-']
def plot(ax, style):
return ax.plot(x, y, style, animated=True)[0]
lines = [plot(ax, style) for ax, style in zip(axes, styles)]
# Capture Background
backgrounds = [fig.canvas.copy_from_bbox(ax.bbox) for ax in axes]
for i in xrange(1, 2000):
for j, (line, ax, background) in enumerate(zip(lines, axes, backgrounds), start=1):
fig.canvas.restore_region(background)
line.set_ydata(np.sin(j*x i/10.0))
ax.draw_artist(line)
fig.canvas.blit(ax.bbox)
importar matplotlib.pyplot como plt importar matplotlib.animation como animação def animado(i): para j, linha em enumerar(linhas, início=1): linha.set_ydata(np.sin(j*x i/10.0)) ani = animação.FuncAnimation(fig, animate, xrange(1, 200), intervalo=0, blit=True)
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3