integrer des caracteres dans les abscisses d'un diagramme cree à l'aide de Matplotlib

comment ecrire des caracteres en abscisses d'un diagramme avec matplotlib

a marqué ce sujet comme résolu.

Bonjour; Après avoir installè les bibliothèques numpy et matplotlib. j’ai crée une application dans laquelle une fois on clique sur un bouton "save", des données sont sauvegardes dans un fichier texte (la première colonne est dédiée à la date). En plus, à chaque qu’on clique à nouveau sur le bouton une nouvelle donnée s’ajoute au dessous de la dernière ligne et ainsi de suite.

voici le contenu du fichier texte file.txt (j’ai intégré dans ce post des point pour séparer les dates par rapport des données au niveau du contenu du fichier à titre indicatif) :

01/12/2010 … 0.132

02/05/2011 … 0.186

28/12/2011 … 0.168

04/06/2012 … 0.122

29/12/2012 … 0.144

06/06/2013 … 0.112

07/01/2014 … 0.186

08/06/2014 … 0.168

19/12/2014 … 0.152

10/06/2015 … 0.164

voici le code python pour creer une figure à partir des données du fichier texte :

import numpy as np
import matplotlib.pyplot as plt
 
def graphe_loc35R():
    x,y = np.loadtxt("file.txt", unpack=True)
    plt.plot(x,y,'o')
     
    plt.xlabel('date')
    plt.ylabel('ddm')
     
    plt.show()`

j’aimerais bien avoir de l’aide pour résoudre ce problème

Merci

+0 -0

Salut,

J’ai bloqué quelques secondes avant de comprendre que le problème était dans la description du sujet.

En gros, le problème doit venir du format de l’axe 'x’. Il y a une réponse sur stackoverFlow qui devrait t’intéresser. Plotting dates on the x-axis with Python’s matplotlib.

En gros, ça dit que l’axe 'x' doit être une liste de nombre comptant le nombre de jour depuis le '0001–01–01' + 1. Donc depuis le 1er1^{er} Janvier de l’an 1.

En fonction de ton format x on devrait pouvoir convertir vers le bon format. Sut Stackoverflow, il y a justement des bouts de code qui pourait allez si ton format est bien une liste de chaine de date au format '04/06/2012’. Quel heureux hasard ^^

+0 -0

bonjour; après plusieurs tentatives et essai, je suis arrive en final a ce code qui réalise approximativement mes besoins :

contenu du fichier texte(graphe_loc35R.txt):

01/12/2010  0.132
02/05/2011  0.186
28/12/2011  0.168
04/06/2012  0.122
29/12/2012  0.144
06/06/2013  0.112
07/01/2014  0.186
08/06/2014  0.168
19/12/2014  0.152
10/06/2015  0.164

code python à ameliorer:

import matplotlib.pyplot as plt
import numpy as np

dates=list()
datalines=list()
with open('graphe_loc35R.txt', 'r') as f:
    lines = [line.split() for line in f.readlines()]

    for k in range(0,len(lines)):
        lines_modifie=lines[k][0]
        dates.append(lines_modifie)

    for j in range(0,len(lines)):
        lines_data=lines[j][1]
        datalines.append(lines_data)

x=dates
y=datalines

plt.plot(x,y)
plt.title('valeurs de la ddm faisceau durant cev')
plt.axis('equal')
plt.gcf().autofmt_xdate()

plt.xlabel("jours du controle en vol",color='brown',size = 16)
plt.ylabel("ddm faisceau",color='brown',size= 16)

plt.show()
plt.close()

mais il ya une chose qui me tracasse c’est que les valeurs des ordonnes (y) ne sont pas organises du petit au pus grand j’aimerais bien qu’on m’aide à résoudre ce problème merci

+0 -0

Tu peux nous donner un extrait représentatif du fichier "0graphe_loc35R.txt"

Juste pour qu’on se fasse une idée du résultat ?

+0 -0

Arf, effectivement, c’est pas beau >_<"

Essaye avec ce code :

import matplotlib.pyplot as plt
import numpy as np

dates=list()
datalines=list()
with open('graphe_loc35R.txt', 'r') as f:
    lines = [line.split() for line in f.readlines()]

    for k in range(0,len(lines)):
        lines_modifie=lines[k][0]
        dates.append(lines_modifie)

    for j in range(0,len(lines)):
        lines_data=lines[j][1]
        datalines.append(float(lines_data))

x=dates
y=datalines

plt.plot(x,y)
plt.title('valeurs de la ddm faisceau durant cev')
plt.axis('equal')
plt.gcf().autofmt_xdate()

plt.xlabel("jours du controle en vol",color='brown',size = 16)
plt.ylabel("ddm faisceau",color='brown',size= 16)

plt.show()
plt.close()

Le changement étant sur la ligne :

        datalines.append(lines_data)
# Qui devient :
        datalines.append(float(lines_data))

Ce qui change le type des valeurs de la liste et qui permettrait à matplot de trier.

Tu devrais obtenir ça : Matplot example

On remarque que l’axe des ordonnées est centré sur les valeurs des ordonnées, ce qui pourait faussé l’interprétaton des résultats. Tu peux rajouter cette ligne pour avoir un graphique peut-être plus claire :

plt.ylim(ymin=0,ymax=max(y)*1.1)
# À mettre par exemple avant le plt.plot(x,y)

Qui donne : Matplot example 0 started

J’espère que ça t’aide ;)

+0 -0

Cool, ça veut déjà dire que l’axe des ordonnées est triée …

Essaye la ligne suivante :

plt.ylim(ymin=0,ymax=max(y)*1.1)
# À mettre par exemple avant le plt.plot(x,y)

Afin de recentrer les valeurs.

+0 -0

En toute honnêteté, il n’y a pas de raison qu’il y ai une différence.
Le plus probable soit qu’il y ai une différence entre nos codes.

Voilà le code complet :

import matplotlib.pyplot as plt

dates=list()
datalines=list()
with open('graph_loc35R.txt', 'r') as f:
    lines = [line.split() for line in f.readlines()]

    for k in range(0,len(lines)):
        lines_modifie=lines[k][0]
        dates.append(lines_modifie)

    for j in range(0,len(lines)):
        lines_data=lines[j][1]
        datalines.append(float(lines_data))

x=dates
y=datalines

plt.ylim(ymin=0,ymax=max(y)*1.1)
plt.plot(x,y)
plt.title('valeurs de la ddm faisceau durant cev')
plt.gcf().autofmt_xdate()

plt.xlabel("jours du controle en vol",color='brown',size=16)
plt.ylabel("ddm faisceau",color='brown',size=16)

plt.show()
plt.close()

Sinon, il y a la possibilité que l’on utilise des versions différentes, mais cela m’étonnerait que ça importe beaucoup. Pour info, j’utilise python 3.7 et matplot en version 2.2.3 rev 2. J’ai retiré numpy car justement je ne l’utilisais pas.

+0 -0

bonjour; version de python : 3.7 matplotlib:2.2.3

j’ai copie ton dernier code et je l’ai teste cela m’a donne ce diagramme

diagramme
diagramme

je sais pas pourquoi cela était différent auparavant je crois que ce que je cherche . je vais vérifier plus tard les données de l’axe y par arpport a celle des abscisse est qu’ils coïncident exactement comme le contenu du fichier

merci pour le soutien

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte