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 :

matplotlib - courbe à partir de données extraites d'un fichier [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 479
    Par défaut matplotlib - courbe à partir de données extraites d'un fichier
    Bonjour,

    J’essaie d'afficher une courbe à partir de données extraites d'un fichier qui sont sous la forme:
    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
     0.00; 0.14
     0.02; 0.17
     0.04; 0.18
     0.06; 0.16
     0.08; 0.15
     0.10; 0.19
     0.12; 0.24
     0.14; 0.29
     0.17; 0.28
     0.19; 0.30
     0.21; 0.29
     0.24; 0.29
     0.26; 0.31
     0.29; 0.33
     0.31; 0.31
     0.34; 0.33
     0.36; 0.34
     0.39; 0.37
     0.41; 0.39
     0.43; 0.41
     0.46; 0.44
     0.48; 0.47
    Le problème est que j'arrive à un résultat comme celui-ci:
    Nom : 2018-10-19_14h31_44.jpg
Affichages : 3061
Taille : 17,6 Ko

    Ci-joint ma fonction:
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    def CaulkingCurve(self, DATA_CURVE, START_OF_DATA_CURVE, iLine):
     
            TMP_DATA_CURVE   = []
            KRAFT_DATA_CURVE = []
            WEG_DATA_CURVE   = []
            #plt.title(Curve)
            host = host_subplot(111)
            host.set_xlabel("Course (mm)")
            host.set_ylabel("Effort")
     
     
            #Normal curve or calibration curve
            #print(len(DATA_CURVE[0].split()))
            try:
                #If classic curve
                if len(DATA_CURVE[0].split()) == 2:
                    print('Classic Caulking curve')
     
                    #Now we prepare data for matplotlib curve
                    for x in range(0, iLine-START_OF_DATA_CURVE): 
                        #print(DATA_CURVE[x].split(";"))
                        TMP_DATA_CURVE.append(DATA_CURVE[x].split(";"))
                        WEG_DATA_CURVE.append(TMP_DATA_CURVE[x][0])
                        KRAFT_DATA_CURVE.append(TMP_DATA_CURVE[x][1])
     
                    #print(WEG_DATA_CURVE)
                    SELECTED_CURVE_WEG   = ",".join(WEG_DATA_CURVE)
                    SELECTED_CURVE_KRAFT = ",".join(KRAFT_DATA_CURVE)
                    _SELECTED_CURVE_WEG   = [SELECTED_CURVE_WEG]
                    _SELECTED_CURVE_KRAFT = [SELECTED_CURVE_KRAFT]
     
     
                    p1, = host.plot(_SELECTED_CURVE_WEG, _SELECTED_CURVE_KRAFT, label=Curve)
                    plt.show()
     
                #If calibration curve    
                elif len(DATA_CURVE[0].split()) == 3:
                    print('Calibration curve')
                    #Your code here....
     
                else:
                    print('No data')
                    messagebox.showwarning("XPress info", "No caulking curve available")
            except:
                print('No data for curve')
                messagebox.showwarning("XPress info", "No caulking curve available")

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Je n'ai pas lu tout votre code dans le détail mais votre lecture de fichier à l'air un peu bancal. Vous printez les choses à l'écran à la fin de la lecture pour voir si c'est bon ?

    Je conseillerais plutôt de passer par
    https://docs.scipy.org/doc/numpy/ref...y.loadtxt.html
    pour lire votre fichier. Pas de gestion du nombre de colonnes à parser, c'est automatique. Pas à transformer les string en floatant c'est aussi automatique. Vous récupérer directement un numpy array à partir du fichier. Et selon le nombre de colonnes vous réaliser le plot qu'il faut.

    D'ailleurs j'ai l'impression que vous essayer de tracer qqch en donnant à la fonction plot une chaine de caractère, ce qui n'est bien évidemment pas bon (il vous faut un array de nombre).

    Ensuite pourquoi self en argument alors qu'on ne le voit pas dans le code de la fonction ?
    Si c'est parce que vous avez une classe dans ce cas c'est une staticmethod, et vous enlevez le self ...

    On n'a pas non plus l'ensemble des paramètres d'appel de votre fonction pour pouvoir la tester et comprendre ce qui vous arrive ...

  3. #3
    Membre confirmé Avatar de racine carrée
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 156
    Par défaut
    Bonsoir, ce code m'a l'air très compliqué (et semble faire partie d'une classe vu la présence du mot clé self ?)
    Un code comme celui là devrait marcher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from matplotlib.pyplot import plot,show
    with open("fichier.txt") as f:
        x,y=[],[]
        for line in f:
            a,b=(int(k) for k in line.split(';'))
            x+=[a]
            y+=[b]
    plot(x,y)
    show()
    où fichier.txt est le fichier de la forme que vous avez indiquée, située dans le chemin par défaut de python (probablement le même dossier où est situé votre programme).
    Bon courage.

  4. #4
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 479
    Par défaut
    Bon, j'ai changé de direction...

    Je récupère les valeur d'une autre application mais j'ai le même problème...

    Mon code python:
    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
    25
    26
    import sys
    import glob
    import os
    import numpy as np
     
    import matplotlib.pyplot as plt
    from matplotlib.pyplot import *
     
    FROM_PARAM_INDEX = 1
    TO_PARAM_INDEX = 2
     
    LIST_FROM = sys.argv[FROM_PARAM_INDEX]
    LIST_TO = sys.argv[TO_PARAM_INDEX]
     
    fig = plt.figure()
    ax = fig.add_subplot(111)
     
    WEG_Curve_1 = np.array([LIST_FROM])
    KRAFT_Curve_1 = np.array([LIST_TO])
    p1, = plt.plot(WEG_Curve_1, KRAFT_Curve_1)
     
    plt.xlabel('Course (mm)')
    plt.ylabel('Effort (kN)')
    #plt.axis("equal")
    plt.xlim(-0.5, 5)
    plt.show()
    Merci par avance...

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    On ne peut pas faire tourner votre code en l'état. Il faut nous fournir tout ce qu'il faut (à vous de réduire si tout c'est trop)

  6. #6
    Membre expérimenté
    Profil pro
    Loisir
    Inscrit en
    Novembre 2011
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Loisir

    Informations forums :
    Inscription : Novembre 2011
    Messages : 159
    Par défaut
    Ton code corrigé :

    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
    import numpy as np
    import matplotlib.pyplot as plt
     
    # j'ai remplacé les sys.arg pour avoir des données
    LIST_FROM = [0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.12, 0.14, 0.17, 0.19, 0.21, 0.24, 0.26, 0.29, 0.31, 0.34, 0.36, 0.39, 0.41, 0.43, 0.46, 0.48]
    LIST_TO = [0.14, 0.17, 0.18, 0.16, 0.15, 0.19, 0.24, 0.29, 0.28, 0.3, 0.29, 0.29, 0.31, 0.33, 0.31, 0.33, 0.34, 0.37, 0.39, 0.41, 0.44, 0.47]
     
    fig = plt.figure()
    ax = fig.add_subplot(111)
     
    WEG_Curve_1 = np.asarray(LIST_FROM) # regarde exactement ce que donne np.array([LIST_FROM]) dans le prompt. Utilise la méthode shape pour bien voir la différence
    KRAFT_Curve_1 = np.asarray(LIST_TO)
    p1 = plt.plot(WEG_Curve_1, KRAFT_Curve_1) # j'ai viré la virgule après p1 car p1 = est différent de p1, =
     
    plt.xlabel('Course (mm)')
    plt.ylabel('Effort (kN)')
    #plt.axis("equal")
    plt.xlim(-0.5, 5)
    plt.show()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. tracer des courbes à partir des données Excel
    Par jeunehomme dans le forum MATLAB
    Réponses: 5
    Dernier message: 26/03/2015, 22h38
  2. Réponses: 13
    Dernier message: 20/04/2013, 14h00
  3. Réponses: 8
    Dernier message: 25/07/2010, 10h15
  4. Réponses: 1
    Dernier message: 25/01/2010, 23h07
  5. [JGraph]dessiner une courbe à partir de données
    Par marwaza22 dans le forum 2D
    Réponses: 1
    Dernier message: 16/11/2006, 16h16

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