Frage zu FuncAnimation

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
PythonEngineer
User
Beiträge: 1
Registriert: Samstag 31. Dezember 2022, 15:13

Hallo zusammen,

ich habe angefangen, mich ein wenig mit Python, Matplotlib und Numpy zu beschäftigen.
Mir ist FuncAnimation aufgefallen, mit der man animierte Diagramme erstellen kann und mit der ich ein wenig rumexperimentiert habe.

Was ich gern machen würde, ist den positiven Teil einer Parabel zu animieren. Erst nur mit zwei Punkten auf der x-Achse (also eine Gerade) und dann soll nach und nach in jedem neuen Frame ein weiterer Punkt auf der x-Achse hinzukommen. Sodass aus der Geraden nach und nach eine schicke Parabel wird. Unten links soll dann die Anzahl der Punkte stehen. Das Intervall soll 1s betragen, d.h. jede Sekunde soll ein Punkt hinzukommen.

Das habe ich auch soweit geschafft. Aber Das Diagramm beginnt immer leer (das heißt man sieht erstmal nur das leere Gitter ohne Linie) und nach einer Sekunde beginnt es dann mit der Geraden. Daher die Frage, ob man auch direkt von Beginn an mit der Geraden starten kann. Dass also direkt die Gerade zu sehen ist und beim ersten Aufruf der Update-Funktion dann ein dritter Punkt auf der x-Achse hinzukommt.

Hier ist mein aktueller Code:

Code: Alles auswählen

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import matplotlib.animation


def update(n):
    xdata = np.linspace(0, 10, n + 2)
    ydata = xdata ** 2
    plot.set_data(xdata, ydata)
    text.set_text(f"N = {n + 2}")

    return plot, text,


if __name__ == '__main__':
    xdata = np.linspace(0, 10, 2)
    ydata = xdata ** 2

    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    ax.set_xlim(0, 10)
    ax.set_ylim(0, 100)
    ax.set_xlabel("x")
    ax.set_ylabel("x^2")
    ax.grid()

    plot, = ax.plot(xdata, ydata)
    text = ax.text(0.0, 1.05, '')

    ani = mpl.animation.FuncAnimation(fig, update, interval=1000, blit=True)
    plt.show()

Danke im Voraus :)
Antworten