Considérations sur les performances pour le traçage Matplotlib
Lors de l'évaluation de différentes bibliothèques de traçage Python, vous pouvez rencontrer des problèmes de performances lors de l'utilisation de Matplotlib. Cet article explore pourquoi le traçage de Matplotlib peut être lent et propose des solutions pour améliorer sa vitesse.
La lenteur provoque
Les performances lentes de Matplotlib proviennent principalement de deux facteurs :
Amélioration des performances
Pour améliorer les performances, envisagez les stratégies suivantes :
1. Utiliser le Blitting :
Le Blitting implique uniquement de mettre à jour une partie spécifique du canevas au lieu de redessiner la figure entière. Cela réduit considérablement la charge de calcul. Matplotlib fournit des méthodes de blitting spécifiques au backend qui varient en fonction du framework GUI utilisé.
2. Restreindre le redessin :
Utilisez l'option animation=True lors du traçage. Combinée au module d'animations Matplotlib, cette technique permet des mises à jour d'objets spécifiques sans déclencher un redessinage complet du canevas.
3. Personnaliser les sous-parcelles :
Réduire le nombre de sous-parcelles et cocher les étiquettes. Supprimez les éléments inutiles pour réduire le temps de rendu.
4. Améliorez l'efficacité du code :
Refactorisez votre code pour améliorer sa structure et réduire le nombre d'opérations effectuées. Utilisez des opérations vectorisées lorsque cela est possible.
Exemple :
Voici une version optimisée du code fourni dans la question, en utilisant le blitting avec copy_from_bbox et restaurer_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))
Bibliothèques alternatives
Si les performances de Matplotlib restent insatisfaisantes, envisagez des bibliothèques de traçage alternatives telles que comme Bokeh, Plotly ou Altair. Ces bibliothèques donnent la priorité à l'interactivité en temps réel et à l'optimisation des performances.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3