Matplotlib Plot Curva liscia

  1. Traccia curva liscia usando la classe scipy.interpolate.make_interp_spline()
  2. Traccia curva liscia usando la classe scipy.ndimage.gaussian_filter1d()
  3. 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 morbida utilizzando la funzione make_interp_spline()

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:

Curva tracciata utilizzando i punti dati

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:

Traccia una curva liscia utilizzando la funzione gaussian_filter1d()

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:

Traccia curva liscia utilizzando l'interpolazione cubica

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.