Courbe lisse de Matplotlib Plot
-
Tracer une courbe lisse en utilisant la classe
scipy.interpolate.make_interp_spline()
-
Tracez une courbe lisse en utilisant la classe
scipy.ndimage.gaussian_filter1d()
-
Tracer une courbe lisse en utilisant la classe
scipy.interpolate.interp1d
Ce tutoriel explique comment tracer une courbe lisse à partir de coordonnées données en utilisant les modules du paquet Scipy
et Matplotlib
.
La fonction matplotlib.pyplot.plot()
par défaut produit une courbe en joignant deux points adjacents dans les données avec une ligne droite, et donc la fonction matplotlib.pyplot.plot()
ne produit pas de courbe lisse pour un petit nombre de points de données.
Pour tracer une courbe lisse, on ajuste d’abord une courbe spline à la courbe et on utilise la courbe pour trouver les valeurs y pour les valeurs x séparées par un écart infiniment petit. Enfin, nous obtenons une courbe lisse en traçant les points présentant un écart très faible.
Tracer une courbe lisse en utilisant 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()
Production :
Il trace une courbe spline lisse en déterminant d’abord les coefficients de la courbe spline à l’aide de la fonction scipy.interpolate.make_interp_spline()
. Nous utilisons les données données données pour estimer les coefficients de la courbe spline et ensuite nous utilisons les coefficients pour déterminer les valeurs y
pour les valeurs x
rapprochées afin de rendre la courbe lisse. Il faut 500 valeurs équidistantes entre 1 et 7 sur l’axe X pour tracer la courbe.
Par défaut, le degré de la courbe spline est 3. Nous pouvons régler le paramètre k
pour modifier le degré de la courbe spline.
Si nous utilisons les points donnés pour tracer la courbe, nous obtenons la courbe comme :
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()
Production :
Tracez une courbe lisse en utilisant 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()
Production :
Si la fonction n’est pas lisse, nous pouvons utiliser le gaussian_filter1d()
pour rendre les valeurs Y
lisses. La classe scipy.ndimage.gaussian_filter1d()
lissera les valeurs Y pour générer une courbe lisse, mais les valeurs Y originales pourraient être modifiées.
Le paramètre sigma
représente l’écart-type pour le noyau gaussien et nous obtenons une courbe plus lisse en augmentant la valeur de sigma
.
Tracer une courbe lisse en utilisant 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()
Production :
Il génère une courbe d’interpolation cubique en utilisant la classe scipy.interpolate.interp1d
, et nous utilisons ensuite la courbe pour déterminer les valeurs y
pour des valeurs x
proches les unes des autres pour une courbe lisse. Pour tracer la courbe, il faut 500 points également espacés entre 1 et 7 le long de l’axe X.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn