Matplotlib Plot glatte Kurve
-
Plotten einer glatten Kurve mit der Klasse
scipy.interpolate.make_interp_spline()
-
Plotten einer glatten Kurve mit der Klasse
scipy.ndimage.gaussian_filter1d()
-
Plotten einer glatten Kurve mit der Klasse
scipy.interpolate.interp1d
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:
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:
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:
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:
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 is a backend software engineer at Matrice.ai.
LinkedIn