Consideraciones de rendimiento para el trazado de Matplotlib
Al evaluar diferentes bibliotecas de trazado de Python, es posible que encuentre problemas de rendimiento al utilizar Matplotlib. Este artículo explora por qué el trazado de Matplotlib puede ser lento y proporciona soluciones para mejorar su velocidad.
Causas de lentitud
El lento rendimiento de Matplotlib se debe principalmente a dos factores:
Mejora del rendimiento
Para mejorar el rendimiento, considere las siguientes estrategias:
1. Utilice Blitting:
Blitting implica solo actualizar una porción específica del lienzo en lugar de volver a dibujar la figura completa. Esto reduce drásticamente la sobrecarga computacional. Matplotlib proporciona métodos de blitting específicos de backend que varían según el marco de GUI utilizado.
2. Restringir el redibujado:
Utilice la opción animada=True al trazar. Combinada con el módulo de animaciones de Matplotlib, esta técnica permite actualizaciones de objetos específicos sin activar un rediseño completo del lienzo.
3. Personalizar subtramas:
Minimiza el número de subtramas y etiquetas de marca. Elimine elementos innecesarios para reducir el tiempo de renderizado.
4. Mejore la eficiencia del código:
Refactorice su código para mejorar su estructura y reducir la cantidad de operaciones realizadas. Utilice operaciones vectorizadas siempre que sea posible.
Ejemplo:
Aquí hay una versión optimizada del código proporcionado en la pregunta, usando blitting con copy_from_bbox y recovery_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
Si el rendimiento de Matplotlib sigue siendo insatisfactorio, considere bibliotecas de trazado alternativas como como Bokeh, Plotly o Altair. Estas bibliotecas priorizan la interactividad en tiempo real y la optimización del rendimiento.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3