Bonjour,
Je ne connais pas du tout le python et je souhaite tracer une courbe y en fonction de x avec des données issues de Y.txt et X.txt qui ressemble à cela:
Y.txt
X.txt
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 90.2 85.2 78.5 ...
Pour cela j'utilise Matplotlib en stockant dans un tableau différent les données issues de chaque fichier, mais le problème est que je n'arrive pas à créer le graphique car j'ai l'erreur suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 0.8 0.07 0.9 ...
Voici le script:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 raise ValueError("x and y must have same first dimension") ValueError: x and y must have same first dimension
J'ai trouvé une solution qui marche en bidouillant un script existant, mais j'aimerai bien faire fonctionner mon script et comprendre pourquoi il ne marche pas, voici le deuxième script:
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 #!/usr/bin/env python # -*- coding: iso-8859-1 -*- from numpy import * import matplotlib.pyplot as plt dataG = fromfile('X.txt', 'float32') dataC = fromfile('Y.txt', 'float32') x = dataG[::1] y = dataC[::1] plt.plot(x, y) #je precise que les deux fichiers ont le même nombres de lignes plt.xlabel('Energy [MeV]') plt.ylabel('Nb particles') plt.legend() plt.show()
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 # -*- coding: iso-8859-1 -*- import matplotlib.pyplot as plt import sys import os #for i in range(1, len(sys.argv)): f1 = open(sys.argv[1], 'r') x = [] lines = [line.strip() for line in f1.readlines()] for line in lines: col1 = line.split() x.append(col1) f2 = open(sys.argv[2], 'r') y = [] lines = [line.strip() for line in f2.readlines()] for line in lines: col2 = line.split() y.append(col2) #string, ext = os.path.splitext(sys.argv[i]) plt.plot(x, y) plt.xlabel('epsilon') plt.ylabel('MPa') plt.legend() plt.show()
Merci de votre aide.
Partager