Courbe lisse de Matplotlib Plot

Suraj Joshi 30 janvier 2023
  1. Tracer une courbe lisse en utilisant la classe scipy.interpolate.make_interp_spline()
  2. Tracez une courbe lisse en utilisant la classe scipy.ndimage.gaussian_filter1d()
  3. Tracer une courbe lisse en utilisant la classe scipy.interpolate.interp1d
Courbe lisse de Matplotlib Plot

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 :

Tracer une courbe lisse en utilisant la fonction make_interp_spline()

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 :

Courbe tracée en utilisant les points donnés

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 :

Tracer une courbe lisse en utilisant la fonction gaussian_filter1d()

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 :

Tracer une courbe lisse en utilisant l’interpolation cubique

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.

Auteur: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn