Leistungsüberlegungen für Matplotlib-Plots
Bei der Evaluierung verschiedener Python-Plot-Bibliotheken können bei der Verwendung von Matplotlib Leistungsprobleme auftreten. In diesem Artikel wird untersucht, warum das Plotten mit 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 bestimmte Objektaktualisierungen, ohne eine vollständige Neuzeichnung der Leinwand auszulösen.
3. Unterhandlungen anpassen:
Minimieren Sie die Anzahl der Unterhandlungen und Häkchenbezeichnungen. 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:
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))
Alternative Bibliotheken
Wenn die Leistung von Matplotlib weiterhin unbefriedigend bleibt, ziehen Sie alternative Plotbibliotheken in Betracht, z als Bokeh, Plotly oder Altair. Diese Bibliotheken priorisieren Echtzeit-Interaktivität und Leistungsoptimierung.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3