IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Lissage de courbe matplotLib


Sujet :

Python

  1. #1
    Membre confirm�
    Homme Profil pro
    Curieux
    Inscrit en
    Avril 2020
    Messages
    114
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 50
    Localisation : France, Seine et Marne (�le de France)

    Informations professionnelles :
    Activit� : Curieux
    Secteur : B�timent

    Informations forums :
    Inscription : Avril 2020
    Messages : 114
    Par d�faut Lissage de courbe matplotLib
    Bonjour � tous,

    Je n'arrive pas � obtenir le lissage attendu sur une courbe :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.interpolate import make_interp_spline, CubicSpline, UnivariateSpline
     
    x = (0,3,5,10,30,60,90,120,150,180)
    y = (20,890,1140,1200,1300,1350,1300,1200,1200,1200)
     
    x_new = np.linspace(min(x), max(x),130)
     
    f =  make_interp_spline(x, y)
    f1 = CubicSpline(x, y)
    f2 =  UnivariateSpline(x, y)
    #f2.set_smoothing_factor(0.9)
     
    y_smooth=f(x_new)
    y1_smooth=f1(x_new)
    y2_smooth=f2(x_new)
     
    plt.plot(x, y, '--o', label = 'standard')
    plt.plot(x_new, y_smooth, '-', label ='spline')
    plt.plot(x_new, y1_smooth, '-', label ='spline1')
    plt.plot(x_new, y2_smooth, '-', label ='spline2')
    plt.legend( loc='best')
    plt.show()
    Quelles que soient les m�thodes employ�es j'ai un esp�ce virgule non souhait�e... Avez une id�e une solution, je vois pas ou ce que je zappe.


    Merci

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    F�vrier 2006
    Messages
    12 848
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 12 848
    Billets dans le blog
    1
    Par d�faut
    Bonjour
    Citation Envoy� par Aelurus_ Voir le message
    je vois pas ou ce que je zappe.
    Peut-�tre que ce qui s'affiche c'est le vrai r�sultat d'un lissage math�matique
    J'ai essay� ton code mais avec des donn�es r�duites...
    Code python : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    x = (0,3,5,10,30)
    y = (20,890,1140,1200,1300)
    ... et au r�sultat, j'ai une cuvette l� o� la courbe originelle est droite.

    Ensuite, je d�cide de tracer une vraie fonction affine (y=2x)
    Code python : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    x=tuple(range(20))
    y=tuple(z*2 for z in x)
    L�, le lissage correspond exactement � la droite.

    Ensuite je d�cide d'introduire des variations en plus ou en moins sur chaque y...
    Code python : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    import random
    x=tuple(range(20))
    y=tuple(z*2+random.uniform(-2, 2) for z in x)
    ... la courbe int�gre donc ces variations mais le lissage, lui, reste parfait.

    Et enfin je d�cide que les variations seront proportionnelles au point... y=tuple(z*2+random.uniform(-z, z) for z in x) mais l� encore le lissage est exact.

    Donc peut-�tre qu'il n'y a pas de probl�me sur le lissage mais seulement sur le nb de points utilis�s pour l'�chantillonnage...
    Mon Tutoriel sur la programmation �Python�
    Mon Tutoriel sur la programmation �Shell�
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les diff�rentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Curieux
    Inscrit en
    Octobre 2017
    Messages
    5
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 50
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activit� : Curieux
    Secteur : B�timent

    Informations forums :
    Inscription : Octobre 2017
    Messages : 5
    Par d�faut
    Citation Envoy� par Sve@r Voir le message

    Donc peut-�tre qu'il n'y a pas de probl�me sur le lissage mais seulement sur le nb de points utilis�s pour l'�chantillonnage...
    oui �� je me suis pos� la question, j'ai aussi tent� sous ecxel et avec les m�mes entr�es j'obtiens pourtant bien le r�sultat souhait�... Je ne sais pas du tout comment Ecxel s'y prend.
    Donc c'est juste le traitement � identifier. Je ne sais pas comment ecxel s'y prend pour faire le lissage mais je n'ai pas de virgule en debut ni de vague en fin de tracer.
    Des que j'ai identifier le traitement ou le nom du traitement je reviens.

    Merci

  4. #4
    Membre �m�rite

    Homme Profil pro
    Ing�nieur
    Inscrit en
    Ao�t 2010
    Messages
    662
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2010
    Messages : 662
    Par d�faut
    Salut,

    �a m'int�resse �galement. Cette "virgule" est typique de l'utilisation d'un polyn�me de degr� trop �lev� pour les donn�es disponibles (par exemple avoir 3 points et fitter un polyn�me de degr� 3). On peut voir cet effet en faisant varier le degr� de la spline :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    x = (0,3,5,10,30,60,90,120,150,180)
    y = (20,890,1140,1200,1300,1350,1300,1200,1200,1200)
     
    x_new = np.linspace(min(x), max(x), 130)
     
    plt.plot(x, y, '--o', label='standard')
     
    for order in (1, 2, 3, 5, 7, 9):
        f = make_interp_spline(x, y, k=order)
        y_smooth = f(x_new)
        plt.plot(x_new, y_smooth, '-', label='k=%i' % order)
     
    plt.legend(loc='best')
    plt.grid()
    plt.show()
    Nom : Figure_1.png
Affichages : 4487
Taille : 36,4 Ko

    Par curiosit� j'ai essay� de rajouter des points par interpolation lin�aire avant de fitter la spline. Sans effet. Ou alors il faudrait rafiner seulement � certains endroits.

    J

  5. #5
    Membre confirm�
    Homme Profil pro
    Curieux
    Inscrit en
    Avril 2020
    Messages
    114
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 50
    Localisation : France, Seine et Marne (�le de France)

    Informations professionnelles :
    Activit� : Curieux
    Secteur : B�timent

    Informations forums :
    Inscription : Avril 2020
    Messages : 114
    Par d�faut
    Salut la team,

    j'ai trouv� une solution avec GEKKO et les splines, le rendu me va
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    import matplotlib.pyplot as plt
    import numpy as np
    from gekko import GEKKO
     
    x = ([0,3,5,10,30,60,90,120,145,180,240])
    y = ([20,890,1140,1200,1300,1350,1300,1200,1200,1200,1200])
     
    m= GEKKO()
    m.x = m.Param(value = np.linspace(0,240))
    m.y = m.Var()
    m.cspline(m.x,m.y,x,y)
    m.options.IMODE = 2
    m.solve(disp = False)
     
    plt.plot(x, y, 'bo', label='RWS')
    plt.plot(m.x, m.y, 'r--', label='cubic spline')
    plt.legend(loc = 'best')
    plt.xlabel('Durée [min]')
    plt.ylabel('Température [°C]')
     
    plt.show()
    Le resultat est pas mal.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [Fortran 77][D�butant] M�thode de lissage de courbe
    Par fp_81-69 dans le forum Fortran
    R�ponses: 9
    Dernier message: 29/06/2007, 15h17
  2. Lissage de courbe
    Par Tchaill39 dans le forum Algorithmes et structures de donn�es
    R�ponses: 2
    Dernier message: 17/09/2006, 09h53
  3. lissage de courbe
    Par athomaspascal dans le forum Algorithmes et structures de donn�es
    R�ponses: 9
    Dernier message: 03/09/2006, 18h44
  4. R�ponses: 4
    Dernier message: 24/11/2005, 19h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo