Matplotlib Plot glatte Kurve

Suraj Joshi 30 Januar 2023
  1. Plotten einer glatten Kurve mit der Klasse scipy.interpolate.make_interp_spline()
  2. Plotten einer glatten Kurve mit der Klasse scipy.ndimage.gaussian_filter1d()
  3. Plotten einer glatten Kurve mit der Klasse scipy.interpolate.interp1d
Matplotlib Plot glatte Kurve

Dieses Tutorial erklärt, wie man eine glatte Kurve aus gegebenen Koordinaten mit Hilfe von Modulen aus dem Scipy- und Matplotlib-Paket plotten kann.

Die Funktion matplotlib.pyplot.plot() erzeugt standardmäßig eine Kurve, indem sie zwei benachbarte Punkte in den Daten mit einer geraden Linie verbindet, und daher erzeugt die Funktion matplotlib.pyplot.plot() keine glatte Kurve für eine kleine Anzahl von Datenpunkten.

Um eine glatte Kurve zu plotten, passen wir zunächst eine Spline-Kurve an die Daten an und verwenden die Kurve, um die y-Werte für x-Werte zu finden, die durch eine unendlich kleine Lücke getrennt sind. Schließlich erhalten wir eine glatte Kurve, indem wir diese Punkte mit einer sehr kleinen Lücke plotten.

Plotten einer glatten Kurve mit der Klasse scipy.interpolate.make_interp_spline()

import numpy as np
from scipy.interpolate import make_interp_spline
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4, 5, 6, 7])
y = np.array([100, 50, 25, 12.5, 6.25, 3.125, 1.5625])

model = make_interp_spline(x, y)

xs = np.linspace(1, 7, 500)
ys = model(xs)

plt.plot(xs, ys)
plt.title("Smooth Spline Curve")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()

Ausgabe:

Plotten einer glatten Kurve mit der Funktion make_interp_spline()

Es wird eine glatte Spline-Kurve gezeichnet, indem zunächst die Koeffizienten der Spline-Kurve mit Hilfe der Funktion scipy.interpolate.make_interp_spline() bestimmt werden. Wir verwenden die gegebenen Daten, um die Koeffizienten für die Spline-Kurve zu schätzen, und dann verwenden wir die Koeffizienten, um die y-Werte für eng beieinander liegende x-Werte zu bestimmen, um die Kurve zu glätten. Es werden 500 in gleichen Abständen zwischen 1 und 7 entlang der X-Achse benötigt, um die Kurve zu zeichnen.

Standardmäßig ist der Grad der Spline-Kurve 3. Wir können den Parameter k setzen, um den Grad der Spline-Kurve zu ändern.

Wenn wir die angegebenen Punkte verwenden, um die Kurve zu zeichnen, erhalten wir die Kurve als:

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4, 5, 6, 7])
y = np.array([100, 50, 25, 12.5, 6.25, 3.125, 1.5625])

plt.plot(x, y)
plt.title("Curve plotted using the given points")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()

Ausgabe:

Gezeichnete Kurve unter Verwendung der gegebenen Punkte

Plotten einer glatten Kurve mit der Klasse scipy.ndimage.gaussian_filter1d()

import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import gaussian_filter1d

x = np.array([1, 2, 3, 4, 5, 6, 7])
y = np.array([100, 50, 25, 12.5, 6.25, 3.125, 1.5625])
y_smoothed = gaussian_filter1d(y, sigma=5)

plt.plot(x, y_smoothed)
plt.title("Spline Curve Using the Gaussian Smoothing")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()

Ausgabe:

Glatte Kurve mit Hilfe der Funktion gaussian_filter1d() plotten

Wenn die Funktion nicht glatt ist, können wir die gaussian_filter1d() verwenden, um die Y-Werte zu glätten. Die Klasse scipy.ndimage.gaussian_filter1d() glättet die Y-Werte, um eine glatte Kurve zu erzeugen, aber die ursprünglichen Y-Werte werden möglicherweise verändert.

Der Parameter sigma repräsentiert die Standardabweichung für den Gauß-Kernel und wir erhalten eine glattere Kurve, wenn wir den Wert von sigma erhöhen.

Plotten einer glatten Kurve mit der Klasse scipy.interpolate.interp1d

import numpy as np
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4, 5, 6, 7])
y = np.array([100, 50, 25, 12.5, 6.25, 3.125, 1.5625])

cubic_interploation_model = interp1d(x, y, kind="cubic")
xs = np.linspace(1, 7, 500)
ys = cubic_interploation_model(xs)

plt.plot(xs, ys)
plt.title("Spline Curve Using Cubic Interpolation")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()

Ausgabe:

Zeichnen einer glatten Kurve unter Verwendung der kubischen Interpolation

Es wird eine kubische Interpolationskurve unter Verwendung der Klasse scipy.interpolate.interp1d erzeugt, und dann verwenden wir die Kurve, um die Y-Werte für eng beieinander liegende x-Werte für eine glatte Kurve zu bestimmen. Um die Kurve zu zeichnen, benötigt man 500 Punkte, die gleichmäßig zwischen 1 und 7 entlang der X-Achse verteilt sind.

Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn