Wie man Plotaktualisierungen in Matplotlib automatisiert

Suraj Joshi 30 Januar 2023
  1. canvas.draw() zusammen mit canvas_flush_events()
  2. plt.draw() zum Aktualisieren von Plots in Matplotlib
Wie man Plotaktualisierungen in Matplotlib automatisiert

Um die Aktualisierung von Diagrammen in Matplotlib zu automatisieren, aktualisieren wir die Daten, löschen das vorhandene Diagramm und zeichnen dann die aktualisierten Daten in einer Schleife. Zum Löschen der vorhandenen Diagramme verwenden wir verschiedene Methoden wie canvas.draw() zusammen mit canvas_flush_events(), plt.draw() und clear_output().

canvas.draw() zusammen mit canvas_flush_events()

Wir müssen die Handlung einmal konfigurieren. Dann könnten wir die Daten der Plot-Objekte mit set_xdata() und set_ydata() aktualisieren und schließlich den Plot mit canvas.draw() aktualisieren.

import numpy as np
import time
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 100)
y = np.cos(x)

plt.ion()

figure, ax = plt.subplots(figsize=(8, 6))
(line1,) = ax.plot(x, y)

plt.title("Dynamic Plot of sinx", fontsize=25)

plt.xlabel("X", fontsize=18)
plt.ylabel("sinX", fontsize=18)

for p in range(100):
    updated_y = np.cos(x - 0.05 * p)

    line1.set_xdata(x)
    line1.set_ydata(updated_y)

    figure.canvas.draw()

    figure.canvas.flush_events()
    time.sleep(0.1)

Plotaktualisierungen in Matplotlib mit canvas_draw automatisieren

plt.ion() schaltet den interaktiven Modus ein. Der Plot wird nicht aktualisiert, wenn plt.ion() nicht aufgerufen wird.

canvas.draw() ist eine Methode, die auf JavaScript basiert, um Figuren anzuzeigen, und canvas.flush_events() basiert ebenfalls auf JavaScript, um Figuren zu löschen.

plt.draw() zum Aktualisieren von Plots in Matplotlib

Wir verwenden die Funktion matplotlib.pyplot.draw(), um geänderte Zahlen zu aktualisieren, was uns ermöglicht, im interaktiven Modus zu arbeiten. Um die Plots zu aktualisieren, müssen wir vorhandene Zahlen löschen, wofür wir matplotlib.pyplot.clf() und matplotlib.axes.Axes.clear() verwenden können.

Mit plt.clf()

import numpy as np
import time
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 100)
y = np.cos(x)

plt.ion()

figure, ax = plt.subplots(figsize=(8, 6))
(line1,) = ax.plot(x, y)

plt.title("Dynamic Plot of sinx", fontsize=25)

plt.xlabel("X", fontsize=18)
plt.ylabel("sinX", fontsize=18)

for p in range(100):
    updated_y = np.cos(x - 0.05 * p)

    line1.set_xdata(x)
    line1.set_ydata(updated_y)

    figure.canvas.draw()

    figure.canvas.flush_events()
    time.sleep(0.1)

Ausgabe:

Automatisierung von Plotaktualisierungen in Matplotlib unter Verwendung von Draw- und clf-Methoden

Mit fig.clear()

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.cos(x)

fig = plt.figure()

for p in range(50):
    p = 3
    updated_x = x + p
    updated_y = np.cos(x)
    plt.plot(updated_x, updated_y)
    plt.draw()
    x = updated_x
    y = updated_y
    plt.pause(0.2)
    fig.clear()

Ausgabe:

automatisieren Sie Plotaktualisierungen in Matplotlib unter Verwendung von Draw- und Clear-Methoden

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn