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

Calcul scientifique Python Discussion :

plot depuis fichier plusieurs colonnes


Sujet :

Calcul scientifique Python

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut plot depuis fichier plusieurs colonnes
    Bonsoir à tous,

    voilà je viens poser mon problème par ici, j'ai un peu hésité, mais j'ai besoin d'un coup de main avant de trouver ca chiant, pas simple d'apprendre tout seul...

    le but de la fonction : lire un fichier texte, organisé en colonnes, séparées par un espace (un truc du genre col1 col2 col3) et faire un plot de col2 et col3 sur le même graph, en fonction de col1.

    Typiquement, un fichier enregistrant des variations de Y paramètres répartis sur Y colonnes en fonction de la colonne 1 (ou X) qui enregistre le temps..

    Pour deux colonnes : on peut faire ceci :
    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
     
    #!/usr/bin/python
    # encoding: utf-8
     
     
    import matplotlib.pyplot as plt
    import numpy as np
    import csv
     
    def plot(file,title):
    	"plot file with 1 parameter, 1 column "
     
    	file = csv.reader(open(file,"rb"), delimiter="	")
     
    	x = []
    	y = []
     
    	for line in file:
    			temp=line[0].split()		
    			x.append(float(temp[0]))
    			y.append(float(temp[1]))
    	n_x = np.array(x)
    	n_y = np.array(y)
     
    	print n_x
    	print n_y
    	plt.plot(n_x, n_y,"-rx",linewidth=1.0)
    	plt.title(title)
    	plt.grid(True)  
    	raw_input()
    	plt.show()
    	return	
     
    plot('file.txt',"figure title here")
    Aussi, j'imagine le cas où on se trouve avec plusieurs colonne et qu'il soit nécessaire de tracer chaque colonne sur le même graph, en somme un cas "général".

    J'ai tenté, de faire une boucle en remplacant pour l'ajoût dans la liste y des éléments lus pour chaque ligne, mais forcément, je rajoute des valeurs dans ma liste sous la forme : col2,col3,col4, col2*,col3*,col4*, etc avec des * correspondant aux valeurs respectives des lignes suivantes du fichier. Il faudrait alors faire un tri pour ne prendre dans un premier temps que les valeurs de col2 et les ajoutées au tableau n_yi.
    Je ne pense pas que ce soit la meilleure solution, et c'est là ou j'ai besoin d'aide.

    Merci d'avance pour vos lumières!

  2. #2
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    Quelque chose comme ça? J'ai noté que dans ton source tu as mélangé tabulations et espaces... Pas bien.

    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
    #!/usr/bin/python
    # encoding: utf-8
     
    import matplotlib.pyplot as plt
    import numpy as np
    import csv
     
    def plot(file,title, delimiter=' '):
        file = csv.reader(open(file,"rb"), delimiter=delimiter)
        matrix = []
        for line in file:
            matrix.append(line)
        max_columns = len(matrix[0]) - 1
        max_rows = len(matrix)
        x = [matrix[rownum][0] for rownum in range(max_rows)]
        for colnum in range(max_columns):
            y = [matrix[rownum][colnum + 1] for rownum in range(max_rows)]
            plt.plot(x, y)
        plt.show()
     
    plot('file.txt',"figure title here")
    A partir de ce "file.txt". Il faut bien sûr qu'il y ait le même nombre de colonnes sur toutes les lignes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1 12 45 2
    2 13 32 4
    3 14 -4 6
    4 15 -12.45 8
    A+

    Pfeuh

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Oui!

    pour les espaces mélangés aux tabulations : trop de commentaires mis et enlevés puis remis : catastrophe!

    Dans ton exemple, pas la peine d'importer numpy, puisqu'on utilise pas la gestion de tableau au final.

    Merci en tout cas, j'avoue que pour la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        x = [matrix[rownum][0] for rownum in range(max_rows)]
    je n'avais pas pensé au for sur la même ligne.

    Parfait!

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

Discussions similaires

  1. problème sort fichier plusieurs colonnes
    Par l_m_s dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 10/09/2010, 16h49
  2. Créer deux listes à partir d'un fichier à plusieurs colonnes
    Par bourgui78 dans le forum Général Python
    Réponses: 4
    Dernier message: 05/11/2008, 11h00
  3. Réponses: 12
    Dernier message: 30/06/2008, 20h56
  4. [ASE 12.5] MAJ colonne depuis fichier Excel
    Par Thig dans le forum Adaptive Server Enterprise
    Réponses: 1
    Dernier message: 23/11/2006, 14h02
  5. [ASE 12.5] MAJ colonne depuis fichier Excel
    Par Thig dans le forum Sybase
    Réponses: 1
    Dernier message: 23/11/2006, 14h02

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