La passion du libre

Graphiques avec pyplot (toujours en cours d'élaboration)

Cliquez sur le bouton pour afficher les conseils de lecture.Cliquez à nouveau pour les masquer

Fenêtres surgissantes explicatives

Certains mots dans le texte, affichés en vert et en gras, sont précédés d'une étoile verte sur fond orange. Par exemple, ce mot : lien.

Si vous placez le pointeur de la souris sur un tel mot, une fenêtre surgissante – popup – s'ouvre alors que l'affichage du reste du documment s'atténue. Cette fenêtre contient une explication détaillée du mot en question

Une fois que vous avez pris connaissance de ce que vous affiche cette fenêtre surgissante, vous pouvez retourner à l'état normal en cliquant ailleurs dans le document.

Navigation

Pour naviguer, utilisez le menu vertical à gauche du texte. Les entrées de menu marquées d'une petite flèche vers le bas ouvrent un sous-menu lorsqu'on clique dessus.

Vous pouvez également choisir une lecture continue en cliquant sur un des liens proposés en bas de page.

Graphique simple (une seule série)

Données

Article/Nombre de ventes/Chiffre d’affaire/Bénéfice
Article 1/1000/23987/2780
Article 2/1345/57989/4532

Script

Nous allons donner d'emblée le script python qui permet de tracer le graphique à barre correspondant à la première série (ici « Article 1 »).

#!/usr/bin/python3
#invocation python oneserie.py <data file name>
import matplotlib.pyplot as plt
from matplotlib import rcParams
import sys
rcParams.update({'figure.autolayout': True})#nécessaire pour que les ticks autour
#du graphique aient suffisamment de place
#Pour ce script, les séries de données sont supposées être présentées en lignes.
#La première ligne est une ligne d'entêtes
#Une première colonne comprenant un entête de ligne peut, ou pas, exister
#Les données sont supposées provenir de l'enregistrement au format csv d'un 
#tableur, format dans lequel le séparateur est la barre de division /

#ce script ne s'intéresse pour l'instant qu'à la première série de données soit
#la deuxième ligne

f=open(sys.argv[1]) 
newline=next(f)
newline=newline.rstrip('\n')#on élimine tout retour à la ligne
print('newline : '+newline)
entêtes=newline.split('/')#on récupère la ligne des entêtes
print(len(entêtes)) #pour le débogage
newline=next(f)#on lit une nouvelle ligne
newline=newline.rstrip('\n')
valeurs=newline.split('/')# dans ce script on ne garde qu'une série de valeurs
entête_valeurs=[]

try:
    entête_valeurs=int(valeurs[0])#si la première valeur est un texte...
except:
    entête_valeurs.append(valeurs[0]) #...alors en conserve ce texte...
    entête_un=entêtes[0]  #...on fait de même pour la ligne des entêtes
    del valeurs[0]
    del(entêtes[0])

vals=[] #on transforme les textes des valeurs en valeurs numériques
for v in valeurs:
   vals.append(int(v))

plt.xlim(-5,+5) #les limites en x du graphique
xra= range(len(valeurs))# xra est un tableau comportant les valeurs 1,2 et 3 ici. Ce tableau sera passé en paramètre à la commande plot().

g=plt.bar(xra,vals,width=0.7,color='pink',linewidth=1)
plt.xticks([x+0.7 /2 for x in xra], entêtes,rotation =90)
plt.legend(g,entête_valeurs,loc = 'upper left')
plt.title('Graphique à une série de données')
#plt.tight_layout()#cette instruction dégage la place suffisante pour les xticks
plt.savefig('/home/jaaf/pythontuto/figure.png')
plt.show() #doit toujours être placé après la ligne précédente, jamais avant
f.close()

En exécutant

[jaaf@jaaf-pc pythontuto]$ python3 oneserie.py extab.csv

on obtient l'image suivante :

oneserie.jpeg

Commentaire

Dans la première partie, on lit les lignes du fichier et on place les entêtes et les valeurs dans des tableaux (list) pour pouvoir les manipuler plus facilement.  Les textes des valeurs sont transformés en nombres (entiers ici mais qui auraient pu être des float).

Avec l'instruction

plt.xlim(-5,+5) 

on laisse un peu de place pour la légende. Nous reviendrons un peu plus loin dans ce tutoriel sur la manière de placer la légende.

L'instruction de tracé d'une barre, bar, se présente comme suit :

g=plt.bar(xra,vals,width=0.7,color='pink',linewidth=1)

Les paramètres sont les suivants :

  • xra la plage des valeurs où sont positionnés (par défaut) les barres
  • vals le tableau des hauteur de barre correspondant aux abscisses données par xra
  • width la largeur de la barre (0.7). Avec une largeur de barre supérieure à 1, les barres se chevaucheraient.
  • color la couleur des barres
  • linewidth la largeur des traits autour des barres

De nombreux autres paramètres facultatifs sont possibles pour la fonction bar (voir la documentation de pyplot.bar()