Maison > développement back-end > Tutoriel Python > Comment accélérer le traçage Matplotlib pour améliorer les performances ?

Comment accélérer le traçage Matplotlib pour améliorer les performances ?

Susan Sarandon
Libérer: 2024-10-19 20:48:29
original
1090 Les gens l'ont consulté

How to Speed Up Matplotlib Plotting to Enhance Performance?

Pourquoi Matplotlib est-il si lent ?

Lors de l'évaluation des bibliothèques de traçage Python, il est important de prendre en compte les performances. Matplotlib, une bibliothèque largement utilisée, peut sembler lente, ce qui soulève des questions quant à son accélération ou à l'exploration d'options alternatives. Examinons le problème et explorons les solutions possibles.

L'exemple fourni présente un tracé avec plusieurs sous-tracés et mises à jour de données. Avec Matplotlib, ce processus implique de tout redessiner, y compris les limites des axes et les étiquettes de graduation, ce qui entraîne une lenteur des performances.

Comprendre les goulots d'étranglement

Deux facteurs clés contribuent à la lenteur :

  1. Redessin excessif : La fonction fig.canvas.draw() de Matplotlib redessine la figure entière, même lorsque seule une petite partie doit être mise à jour.
  2. Étiquettes de tiques abondantes :Un grand nombre d'étiquettes de tiques et de sous-parcelles peuvent alourdir considérablement le processus de dessin.

Optimisation avec le Blitting

Pour résoudre ces goulots d'étranglement , pensez à utiliser le blitting. Le Blitting consiste à mettre à jour uniquement des parties spécifiques de la figure, réduisant ainsi le temps de rendu. Cependant, un code spécifique au backend est nécessaire pour une mise en œuvre efficace, ce qui peut nécessiter l'intégration de tracés Matplotlib dans une boîte à outils GUI. La technique peut fournir des performances raisonnables sans dépendance au backend :

Capturer l'arrière-plan :

Avant l'animation, capturez l'arrière-plan de chaque sous-intrigue pour le restaurer plus tard.

    Mettre à jour et Draw :
  1. Pour chaque image, mettez à jour les données et l'artiste des lignes, en restaurant l'arrière-plan et en supprimant la partie mise à jour.
  2. Évitez de redessiner :
  3. Utilisez fig.canvas.blit( ax.bbox) au lieu de fig.canvas.draw() pour mettre à jour uniquement la zone nécessaire.
  4. Exemple de mise en œuvre :

Module d'animation

Les versions récentes de Matplotlib incluent un module d'animations, qui simplifie le blitting :
<code class="python">import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 2*np.pi, 0.1)
y = np.sin(x)

fig, axes = plt.subplots(nrows=6)

styles = ['r-', 'g-', 'y-', 'm-', 'k-', 'c-']
def plot(ax, style):
    return ax.plot(x, y, style, animated=True)[0]

lines = [plot(ax, style) for ax, style in zip(axes, styles)]

# Capture Background
backgrounds = [fig.canvas.copy_from_bbox(ax.bbox) for ax in axes]

for i in xrange(1, 2000):
    for j, (line, ax, background) in enumerate(zip(lines, axes, backgrounds), start=1):
        fig.canvas.restore_region(background)
        line.set_ydata(np.sin(j*x + i/10.0))
        ax.draw_artist(line)
        fig.canvas.blit(ax.bbox)</code>
Copier après la connexion

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