Tracé de lignes lisses avec PyPlot
J'ai la suite de script simple qui trace un graphe:
import matplotlib.pyplot as plt
import numpy as np
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])
plt.plot(T,power)
plt.show()
Comme il est maintenant, la ligne va droit point à point qui semble ok, mais pourrait être mieux, à mon avis. Ce que je veux, c'est pour lisser la ligne entre les points. Dans Gnuplot je voudrais avoir comploté avec smooth cplines
.
Est-il un moyen facile de le faire dans PyPlot? J'ai trouvé des tutoriels, mais ils ont tous l'air assez complexe.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
scipy.interpolate.spline
pour lisser vos données vous-même:De commutation de
spline
àBSpline
n'est pas un simple copier/coller et nécessite un peu de peaufinage:Avant:

Après:

np.linspace
. Corrigé dans ma réponse.spline
est obsolète! spline est obsolète dans scipy 0.19.0, utilisez BSpline classe à la place:from scipy.interpolate import BSpline
#BSpline object
commentaire un type commespl = make_interp_spline(T, power, k=3) # type: BSpline object
de sorte que l'importation de BSpline conduit à un peu plus de l'utilisation efficace ... ou était-ce nécessaire pour rien? Je suis là pour le rappeler 🙂 (en Plus il n'y a pas de mal à faire des commentaires un peu plus PEP8 style, après tout, c'est "exposé" du code.) Mais en général: merci pour l'exemple!Pour cet exemple spline fonctionne bien, mais si la fonction n'est pas lisse, intrinsèquement et vous voulez avoir la version lissée vous pouvez également essayer:
si vous augmentez sigma, vous pouvez obtenir un plus lissée fonction.
De procéder avec prudence avec celui-ci. Il modifie les valeurs d'origine et ne peut pas être ce que vous voulez.
Je présume que tu veux dire la courbe d'ajustement et pas l'anti-aliasing à partir du contexte de votre question. PyPlot n'a pas de prise en charge intégrée pour cela, mais vous pouvez facilement mettre en œuvre certaines de base de la courbe d'ajustement vous-même, comme le code vu ici, ou si vous utilisez GuiQwt il a un ajustement de la courbe module. (Vous pourriez probablement aussi voler le code de SciPy de le faire).
rbf = Rbf(x, y), fi = rbf(xi)
était le meilleur d'entre eux. [1]: scipy-cookbook.readthedocs.io/items/RadialBasisFunctions.html,