Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 11 sur 11
  1. #1
    Membre expérimenté Avatar de LinuxUser
    Inscrit en
    avril 2007
    Messages
    811
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 811
    Points : 507
    Points
    507

    Par défaut Simple courbe avec matplotlib

    Bonjour,

    Je souhaiterais afficher une simple courbe avec matplotlib mais cela ne marche pas.
    En fait je pars d'un fichier texte "data.txt" composé de deux colonnes et qui ressemble à ça :


    1 216
    2 109
    3 730
    4 549
    5 441
    6 368
    7 317
    8 278
    9 245
    10 223

    A partir de cela je souhaiterais faire une courbe où la première colonne serait l'axe des "x" et la second des "y".
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    #!/usr/bin/env python
    # -*- coding: iso-8859-1 -*-
     
    import Tkinter
    import numpy
    import matplotlib
     
    from numpy import *
    import matplotlib.pyplot as plt
     
    data  = fromfile('data.txt', 'float32')
     
    col1     = data[::1]
    col2     = data[::2]
     
    plt.plot(col1,col2)
    #plt.loglog(col1,col2)
     
    plt.show()
    J'obtiens le message d'erreur suivant :
    Code :
    1
    2
     
    ValueError: x and y must have same first dimension
    Et lorsque j'affiche "col1" ou col2" je ne retrouve pas les valeurs du fichier "data.txt" (j'ai n'importe quoi qui s'affice).

    Connaissez-vous une manière de lire par colonne(pas un fichier binaire) proprement en python puis d'afficher un graphique à partir de ces colonnes?

    Merci de votre aide.

  2. #2
    Membre Expert
    Avatar de fred1599
    Homme Profil pro Fred
    Enseignant
    Inscrit en
    juillet 2006
    Messages
    1 801
    Détails du profil
    Informations personnelles :
    Nom : Homme Fred
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 801
    Points : 2 440
    Points
    2 440

    Par défaut

    Ton problème vient apparemment de la mauvaise utilisation de numpy, faire des print pour te rendre compte de ton erreur.

    Pour quelquechose d'aussi simple, prendre des choses connues et simples n'est pas une mauvaise idée en soi.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import matplotlib.pyplot as plt
     
    x = []
    y = []
     
    with open('data.txt', 'r') as f:
        lines = [line.strip() for line in f.readlines()]
     
    for line in lines:
        col1, col2 = line.split()
        x.append(int(col1))
        y.append(int(col2))
     
    plt.plot(x, y)
    plt.show()
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Membre expérimenté Avatar de LinuxUser
    Inscrit en
    avril 2007
    Messages
    811
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 811
    Points : 507
    Points
    507

    Par défaut

    OK, merci beaucoup de ton aide.

    Je pensais que l'on pouvait lire chaque colonne d'un seul coup.

    Merci encore

  4. #4
    Membre Expert
    Avatar de fred1599
    Homme Profil pro Fred
    Enseignant
    Inscrit en
    juillet 2006
    Messages
    1 801
    Détails du profil
    Informations personnelles :
    Nom : Homme Fred
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 801
    Points : 2 440
    Points
    2 440

    Par défaut

    Je pensais que l'on pouvait lire chaque colonne d'un seul coup.
    Tu perdrais beaucoup de temps car tu lirais ta ligne de fichier 2 fois
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Membre expérimenté Avatar de LinuxUser
    Inscrit en
    avril 2007
    Messages
    811
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 811
    Points : 507
    Points
    507

    Par défaut

    Une dernier question, comment pourrait-on faire pour repeter cela pour plusieurs fichier.
    Par exemple, afficher sur le même graphique, les courbes issues de "data1.txt", "data2.txt" et "data3.txt" ?

  6. #6
    Membre Expert
    Avatar de fred1599
    Homme Profil pro Fred
    Enseignant
    Inscrit en
    juillet 2006
    Messages
    1 801
    Détails du profil
    Informations personnelles :
    Nom : Homme Fred
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 801
    Points : 2 440
    Points
    2 440

    Par défaut

    Oui

    Code :
    1
    2
    with open(fichier1, 'r') as f, open(fichier2, 'r') as f_1:
        #traitement
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  7. #7
    Membre expérimenté Avatar de LinuxUser
    Inscrit en
    avril 2007
    Messages
    811
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 811
    Points : 507
    Points
    507

    Par défaut

    J'avais plutôt pensé à

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    import matplotlib.pyplot as plt
    import sys
     
    for i in range(len(sys.argv)):
     
      with open(sys.argv[i], 'r') as f:
     
          x = []
          y = []
          lines = [line.strip() for line in f.readlines()]
     
      for line in lines:
          col1, col2 = line.split()
          x.append(float(col1))
          y.append(float(col2))
     
    plt.loglog(x,y)
    plt.show()
    Mais j'ai l'impression qu'il ne prend pas fichier par fichier.

  8. #8
    Membre Expert
    Avatar de fred1599
    Homme Profil pro Fred
    Enseignant
    Inscrit en
    juillet 2006
    Messages
    1 801
    Détails du profil
    Informations personnelles :
    Nom : Homme Fred
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 801
    Points : 2 440
    Points
    2 440

    Par défaut

    Code :
    for i in range(1, len(sys.argv)):
    Je ne savais pas que tu mettais tes fichiers en ligne de commande.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  9. #9
    Membre expérimenté Avatar de LinuxUser
    Inscrit en
    avril 2007
    Messages
    811
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 811
    Points : 507
    Points
    507

    Par défaut

    J'ai pas tout compris (je vais faire des recherche pour comprendre) mais ça marche très bien.

    Je t'embête une dernière fois.
    Je souhaite afficher comme label le nom de fichier mais sans l'extension.
    Je cherche donc une sorte de éstrncopy" en python, pour avoir "data" au lieu "data.txt".





    C'est bon, j'ai fait un
    Code :
    string = sys.argv[i][:-4]

    Merci encore pour tout.

  10. #10
    Membre Expert
    Avatar de fred1599
    Homme Profil pro Fred
    Enseignant
    Inscrit en
    juillet 2006
    Messages
    1 801
    Détails du profil
    Informations personnelles :
    Nom : Homme Fred
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 801
    Points : 2 440
    Points
    2 440

    Par défaut

    Code :
    1
    2
    3
    4
    5
    6
    >>> import os
    >>> os.path.splitext('data.txt')
    ('data', '.txt')
    >>> fichier, ext = os.path.splitext('data.txt')
    >>> print fichier
    data
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  11. #11
    Membre expérimenté Avatar de LinuxUser
    Inscrit en
    avril 2007
    Messages
    811
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 811
    Points : 507
    Points
    507

    Par défaut

    Effectivement c'est plus propre ainsi.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •