Leistungsüberlegungen für Matplotlib-Plots
Beim Evaluieren verschiedener Python-Plot-Bibliotheken können bei der Verwendung von Matplotlib Leistungsprobleme auftreten. In diesem Artikel wird untersucht, warum das Plotten von Matplotlib langsam sein kann, und es werden Lösungen zur Verbesserung der Geschwindigkeit bereitgestellt.
Ursachen für Langsamkeit
Die träge Leistung von Matplotlib ist hauptsächlich auf zwei Faktoren zurückzuführen:
Verbesserung der Leistung
Um die Leistung zu steigern, ziehen Sie die folgenden Strategien in Betracht:
1. Blitting verwenden:
Beim Blitting wird nur ein bestimmter Teil der Leinwand aktualisiert, anstatt die gesamte Figur neu zu zeichnen. Dadurch wird der Rechenaufwand drastisch reduziert. Matplotlib bietet Backend-spezifische Blitting-Methoden, die je nach verwendetem GUI-Framework variieren.
2. Neuzeichnen einschränken:
Verwenden Sie beim Plotten die Option „animated=True“. In Kombination mit dem Matplotlib-Animationsmodul ermöglicht diese Technik spezifische Objektaktualisierungen, ohne eine vollständige Neuzeichnung der Leinwand auszulösen.
3. Unterhandlungen anpassen:
Minimieren Sie die Anzahl der Unterhandlungen und kreuzen Sie Beschriftungen an. Entfernen Sie unnötige Elemente, um die Renderzeit zu verkürzen.
4. Verbessern Sie die Codeeffizienz:
Refaktorieren Sie Ihren Code, um seine Struktur zu verbessern und die Anzahl der durchgeführten Operationen zu reduzieren. Verwenden Sie nach Möglichkeit vektorisierte Vorgänge.
Beispiel:
Hier ist eine optimierte Version des in der Frage bereitgestellten Codes unter Verwendung von Blitting mit copy_from_bbox und restart_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>
Alternative Bibliotheken
Wenn die Leistung von Matplotlib weiterhin unbefriedigend bleibt, ziehen Sie alternative Plotbibliotheken wie Bokeh, Plotly oder in Betracht Altair. Diese Bibliotheken legen Wert auf Echtzeit-Interaktivität und Leistungsoptimierung.
Das obige ist der detaillierte Inhalt vonWarum leidet die Leistung beim Plotten mit Matplotlib und was kann getan werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!