Heim  >  Artikel  >  Backend-Entwicklung  >  Warum leidet die Leistung beim Plotten mit Matplotlib und was kann getan werden?

Warum leidet die Leistung beim Plotten mit Matplotlib und was kann getan werden?

Susan Sarandon
Susan SarandonOriginal
2024-10-19 20:47:30122Durchsuche

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

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:

  • Häufiges Neuzeichnen: Bei jedem Aufruf von fig.canvas.draw() wird die gesamte Figur aktualisiert, einschließlich Elementen wie Achsengrenzen und Teilstrichbeschriftungen. Dieser Prozess ist rechenintensiv.
  • Zahlreiche Unterplots: Plots mit mehreren Unterplots mit vielen Tick-Beschriftungen können das Rendern erheblich verlangsamen.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn