Matplotlib Plot Curva liscia
-
Traccia curva liscia usando la classe
scipy.interpolate.make_interp_spline()
-
Traccia curva liscia usando la classe
scipy.ndimage.gaussian_filter1d()
-
Traccia curva liscia usando la classe
scipy.interpolate.interp1d
Questo tutorial spiega come tracciare una curva morbida da coordinate date usando i moduli del pacchetto Scipy
e Matplotlib
.
La funzione matplotlib.pyplot.plot()
di default produce una curva unendo due punti adiacenti nei dati con una linea retta, e quindi la funzione matplotlib.pyplot.plot()
non produce una curva liscia per un piccolo numero di punti dati.
Per tracciare una curva morbida, adattiamo prima una curva spline alla curva e usiamo la curva per trovare i valori y per i valori x separati da uno spazio infinitamente piccolo. Infine, otteniamo una curva morbida tracciando quei punti con uno spazio molto piccolo.
Traccia curva liscia usando la classe 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()
Produzione:
Traccia una curva spline liscia determinando prima i coefficienti della curva spline utilizzando scipy.interpolate.make_interp_spline()
. Usiamo i dati forniti per stimare i coefficienti per la curva spline e poi usiamo i coefficienti per determinare i valori y
per valori x
ravvicinati per rendere la curva liscia. Ci vogliono 500
equidistanti tra 1 e 7 lungo l’asse X per tracciare la curva.
Per impostazione predefinita, il grado della curva spline è 3. Possiamo impostare il parametro k
per modificare il grado della curva spline.
Se usiamo i punti dati per tracciare la curva, otteniamo la curva come:
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()
Produzione:
Traccia curva liscia usando la classe 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()
Produzione:
Se la funzione non è liscia, possiamo usare gaussian_filter1d()
per rendere fluidi i valori Y
. La classe scipy.ndimage.gaussian_filter1d()
smusserà i valori Y
per generare una curva morbida, ma i valori Y
originali potrebbero essere cambiati.
Il parametro sigma
rappresenta la deviazione standard per il kernel gaussiano e otteniamo una curva più liscia aumentando il valore di sigma
.
Traccia curva liscia usando la classe 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()
Produzione:
Genera una curva di interpolazione cubica usando la classe scipy.interpolate.interp1d
, quindi usiamo la curva per determinare i valori y
per valori x
ravvicinati per una curva liscia. Per tracciare la curva, sono necessari 500 punti equidistanti tra 1 e 7 lungo l’asse X.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn