Maison >développement back-end >Tutoriel Python >Lors du traçage avec Matplotlib, pourquoi les performances souffrent-elles et que peut-on faire ?
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.
Causes de la lenteur
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éduisez le nombre de sous-parcelles et cochez 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 :
<code class="python">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))</code>
Bibliothèques alternatives
Si les performances de Matplotlib restent insatisfaisantes, envisagez des bibliothèques de traçage alternatives telles que Bokeh, Plotly ou Altaïr. Ces bibliothèques privilégient l'interactivité en temps réel et l'optimisation des performances.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!