Lors du traçage avec Matplotlib, pourquoi les performances souffrent-elles et que peut-on faire ?

Susan Sarandon
Libérer: 2024-10-19 20:47:30
original
122 Les gens l'ont consulté

When Plotting with Matplotlib, Why Does Performance Suffer and What Can Be Done?

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 :

  • Redessins fréquents : Chaque fois que fig.canvas.draw() est appelé, il actualise la figure entière, y compris des éléments tels que les limites des axes et les étiquettes de graduation. Ce processus nécessite beaucoup de calculs.
  • De nombreuses sous-parcelles :Les tracés avec plusieurs sous-parcelles comportant de nombreuses étiquettes de graduation peuvent ralentir considérablement le rendu.

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!