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

GUI Python Discussion :

Simple courbe avec matplotlib


Sujet :

GUI Python

  1. #1
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 594
    Points
    594
    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 : 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
     
    #!/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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 940
    Points : 7 350
    Points
    7 350
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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()

  3. #3
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 594
    Points
    594
    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
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 940
    Points : 7 350
    Points
    7 350
    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

  5. #5
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 594
    Points
    594
    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
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 940
    Points : 7 350
    Points
    7 350
    Par défaut
    Oui

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with open(fichier1, 'r') as f, open(fichier2, 'r') as f_1:
        #traitement

  7. #7
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 594
    Points
    594
    Par défaut
    J'avais plutôt pensé à

    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 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
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 940
    Points : 7 350
    Points
    7 350
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in range(1, len(sys.argv)):
    Je ne savais pas que tu mettais tes fichiers en ligne de commande.

  9. #9
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 594
    Points
    594
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    string = sys.argv[i][:-4]

    Merci encore pour tout.

  10. #10
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 940
    Points : 7 350
    Points
    7 350
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  11. #11
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 594
    Points
    594
    Par défaut
    Effectivement c'est plus propre ainsi.

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

Discussions similaires

  1. matplotlib masquer courbe avec bouton tkInter
    Par RyzenOC dans le forum Bibliothèques tierces
    Réponses: 3
    Dernier message: 09/04/2015, 10h04
  2. fit de courbes avec modèles simples
    Par membreComplexe12 dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 10/07/2012, 11h56
  3. Tracer une courbe avec 2 tableau de points
    Par babarpapa dans le forum 2D
    Réponses: 3
    Dernier message: 19/04/2006, 16h24
  4. un petit code tout simple o_O avec des $POST variable :)
    Par dark_vidor dans le forum Langage
    Réponses: 5
    Dernier message: 08/04/2006, 02h08
  5. [Tableaux] simple syntaxe avec $_REQUEST
    Par nicerico dans le forum Langage
    Réponses: 3
    Dernier message: 18/10/2005, 17h01

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