Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > GUI
GUI Forum d'entraide sur les bibliothèques pour interfaces graphiques en Python
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 14/02/2012, 10h01   #1
LinuxUser
Membre éprouvé
 
Avatar de LinuxUser
 
Inscription : avril 2007
Messages : 748
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 748
Points : 418
Points : 418
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.
LinuxUser est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2012, 10h32   #2
fred1599
Membre Expert
 
Avatar de fred1599
 
Homme Fred
Enseignant
Inscription : juillet 2006
Messages : 1 302
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 302
Points : 1 793
Points : 1 793
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)
fred1599 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2012, 11h02   #3
LinuxUser
Membre éprouvé
 
Avatar de LinuxUser
 
Inscription : avril 2007
Messages : 748
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 748
Points : 418
Points : 418
OK, merci beaucoup de ton aide.

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

Merci encore
LinuxUser est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2012, 11h10   #4
fred1599
Membre Expert
 
Avatar de fred1599
 
Homme Fred
Enseignant
Inscription : juillet 2006
Messages : 1 302
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 302
Points : 1 793
Points : 1 793
Citation:
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)
fred1599 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2012, 11h10   #5
LinuxUser
Membre éprouvé
 
Avatar de LinuxUser
 
Inscription : avril 2007
Messages : 748
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 748
Points : 418
Points : 418
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" ?
LinuxUser est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2012, 11h17   #6
fred1599
Membre Expert
 
Avatar de fred1599
 
Homme Fred
Enseignant
Inscription : juillet 2006
Messages : 1 302
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 302
Points : 1 793
Points : 1 793
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)
fred1599 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2012, 11h22   #7
LinuxUser
Membre éprouvé
 
Avatar de LinuxUser
 
Inscription : avril 2007
Messages : 748
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 748
Points : 418
Points : 418
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.
LinuxUser est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2012, 11h28   #8
fred1599
Membre Expert
 
Avatar de fred1599
 
Homme Fred
Enseignant
Inscription : juillet 2006
Messages : 1 302
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 302
Points : 1 793
Points : 1 793
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)
fred1599 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2012, 11h36   #9
LinuxUser
Membre éprouvé
 
Avatar de LinuxUser
 
Inscription : avril 2007
Messages : 748
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 748
Points : 418
Points : 418
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.
LinuxUser est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2012, 11h40   #10
fred1599
Membre Expert
 
Avatar de fred1599
 
Homme Fred
Enseignant
Inscription : juillet 2006
Messages : 1 302
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 302
Points : 1 793
Points : 1 793
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)
fred1599 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2012, 11h42   #11
LinuxUser
Membre éprouvé
 
Avatar de LinuxUser
 
Inscription : avril 2007
Messages : 748
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 748
Points : 418
Points : 418
Effectivement c'est plus propre ainsi.
LinuxUser est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 23h47.


 
 
 
 
Partenaires

Hébergement Web