Dans Matplotlib, les tracés connectent généralement les points de données avec des lignes droites. Bien que cela puisse être acceptable dans certains scénarios, le graphique résultant peut paraître irrégulier ou visuellement peu attrayant. Ce problème peut être résolu en lissant les lignes, ce qui donne une visualisation plus soignée et informative.
Pour lisser les lignes dans Matplotlib, vous pouvez exploiter les capacités de la bibliothèque SciPy. En appelant scipy.interpolate.spline, vous pouvez générer une fonction d'interpolation qui produira une courbe lisse qui passe par les points de données d'origine.
from scipy.interpolate import spline
T = np.array([6, 7, 8, 9, 10, 11, 12])
power = np.array([1.53E 03, 5.92E 02, 2.04E 02, 7.24E 01, 2.72E 01, 1.10E 01, 4.70E 00])
xnew = np.linspace(T.min(), T.max(), 300) # Define the number of points for smoothing
power_smooth = spline(T, power, xnew)
plt.plot(xnew, power_smooth)
Dans les versions SciPy 0.19.0 et ultérieures, spline a été obsolète et remplacée par la classe BSpline. Pour obtenir des résultats similaires, vous pouvez utiliser le code suivant :
from scipy.interpolate import make_interp_spline, BSpline
spl = make_interp_spline(T, power, k=3) # k=3 indicates cubic spline interpolation
power_smooth = spl(xnew)
plt.plot(xnew, power_smooth)
Le tracé d'origine avec des lignes droites et le tracé lissé peuvent être comparés pour clarté :
[Avant](https://i.sstatic.net/dSLtt.png)
[Après](https://i.sstatic.net/olGAh.png)
Comme le montrent les images, le lissage des lignes supprime les irrégularités, ce qui donne un graphique plus attrayant et informatif.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3