Considerações de desempenho para plotagem Matplotlib
Ao avaliar diferentes bibliotecas de plotagem Python, você pode encontrar problemas de desempenho ao usar Matplotlib. Este artigo explora por que a plotagem do Matplotlib pode ser lenta e fornece soluções para melhorar sua velocidade.
Causas de lentidão
O desempenho lento do Matplotlib decorre principalmente de dois fatores:
Melhorando o desempenho
Para melhorar o desempenho, considere as seguintes estratégias:
1. Use Blitting:
Blitting envolve apenas atualizar uma parte específica da tela em vez de redesenhar a figura inteira. Isso reduz drasticamente a sobrecarga computacional. Matplotlib fornece métodos blitting específicos de backend que variam dependendo da estrutura GUI usada.
2. Restringir redesenho:
Utilize a opçãoanimated=True ao plotar. Combinada com o módulo de animações Matplotlib, esta técnica permite atualizações de objetos específicos sem acionar um redesenho completo da tela.
3. Personalizar subtramas:
Minimize o número de subparcelas e marque rótulos. Remova elementos desnecessários para reduzir o tempo de renderização.
4. Aumente a eficiência do código:
Refatore seu código para melhorar sua estrutura e reduzir o número de operações realizadas. Utilize operações vetorizadas sempre que possível.
Exemplo:
Aqui está uma versão otimizada do código fornecido na pergunta, usando blitting com copy_from_bbox e restore_region:
import matplotlib.pyplot as plt
import numpy as np
import time
x = np.arange(0, 2*np.pi, 0.01)
y = np.sin(x)
fig, axes = plt.subplots(nrows=6)
fig.show() # Draw the canvas initially
styles = ['r-', 'g-', 'y-', 'm-', 'k-', 'p-']
lines = [ax.plot(x, y, style)[0] for ax, style in zip(axes, styles)]
# Store background images of the axes
backgrounds = [fig.canvas.copy_from_bbox(ax.bbox) for ax in axes]
tstart = time.time()
for i in range(1, 200):
for j, line in enumerate(lines, start=1):
# Restore the background
fig.canvas.restore_region(backgrounds[j-1])
# Update the data
line.set_ydata(sin(j*x i/10.0))
# Draw the artist and blit
ax.draw_artist(line)
fig.canvas.blit(ax.bbox)
print('FPS:', 200/(time.time()-tstart))
Bibliotecas alternativas
Se o desempenho do Matplotlib permanecer insatisfatório, considere bibliotecas de plotagem alternativas, como como Bokeh, Plotly ou Altair. Essas bibliotecas priorizam a interatividade em tempo real e a otimização do desempenho.
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