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 :
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.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>
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!