Graphique (histogrammes, camemberts, lignes)
depuis Python (via l'utilisation de RMChart)
RMChart est un composant freeware, disponible là :  http://www.rmchart.com.  Il permet de créer des graphiques assez jolis, avec les composants GDI+ de Windows. RMChart est disponible comme un Active-X, ou comme une DLL.
Pour faire Pxchart, je suis parti de rmchart.py (http://pyrmchart.googlepages.com), ce qui m'a évité de redéfinir toutes les (nombreuses constantes). Pour la même raison, pxchart s'appuie sur la DLL de RMChart.
Merci aux auteurs de ces logiciels.


Dans un but de simplification, je n'ai pas repris toutes les possibilités de RMChart. Cela pourrait évoluer dans l'avenir, mais je reste attaché à une utilisation la plus facile possible.
 


 Téléchargement 
 

Pxchart fait partie de Ponx. En installant Ponx, pxchart est automatiquement installé. Lors des mises à jour, en ligne, de Ponx, pxchart est installé si nécessaire, ou mis à jour, si une version plus récente est disponible.
 


 Notions de base 
 

Chaque graphique est généré dans un fichier (.PNG ou .JPEG). Pour obtenir un graphique, il faut : 
   - définir un "chart",
   - ajouter une "région" (une zone du "chart"),
   - appeler la création d'un graphe,
   - générer le fichier.

Notez que :
   - il est possible de créer plusieurs régions ;
   - créer plusieurs graphes pour une même région (ils se superposeront).
 


 Un petit exemple pour montrer l'utilisation  

Cet exemple simple dessine un camembert avec trois positions, sauvegardé dans le fichier cam.jpg.

import pxchart
g=pxchart.chart()
g.addregion(x=2,y=2,larg=-2,haut=-2,titre=u"Camembert")
g.addcamembert(['Label1','Label2','Label3'],[66,22,55])
g.generefichier("cam.jpg"
)

Le résultat (réduit de moitié) :

 

Nous allons maintenant voir les différentes méthodes de l'objet chart.

 


 pxchart.chart    pxchart.chart(typ='bar', x=10,y=10, larg=640,haut=480, fond='')

chart permet de créer le graphe. Les paramètres sont :
   - le type ; inutilisé pour le moment.
   - x ; position gauche de début du graphe, en pixels
   - y ; position haute de début du graphe, en pixels
   - larg ; largeur du graphe, en pixels
   - haut ; hauteur du graphe, en pixels 
   - fond ; (facultatif) image de fond du graphe. Peut être un .jpg, .png, .bmp.
 


 addregion    addregion(x=0,y=0, larg=640, haut=480, titre=None)  

Permet de créer une région, qui est une partie rectangulaire du graphe. Il appartient au développeur de calculer les tailles et positions des différentes régions. Pour un usage courant, une seule région suffit. Les paramètres sont :
   - x ; position gauche de début de la région, en pixels
   - y ; position haute de début de la région, en pixels
   - larg ; position de la largeur de la région, en pixels ; une valeur négative est comptée à partir du bord droit du graphe. 
   - haut ; position basse de la hauteur de la région, en pixels ; une valeur négative est comptée à partir du bord bas du graphe.
   - titre ; (facultatif) titre de la région
 


 addwatermark    addwatermark(txt="Michel Claveau Informatique")  

Ecrit un texte court sur le fond du graphe. Le (seul) paramètre est : 
   - txt ; texte du "water-mark".
 


 generefichier    generefichier(fichier="chart.png", show=True) 

Enregistre le graphe créé dans un fichier.  Les paramètres sont : 
   - fichier ; nom du fichier ; l'extension (.jpg ou .png) indiquera à pxchart quel type de fichier utiliser
   - show ; indicateur pour visualisation du fichier créé. Cela se fait par appel du logiciel par défaut de visualisation d'un fichier .png ou .jpg
 


 addbarre    addbarre(llabel,ldata,style=7,rotation=False)

Pour créer un graphique de type "histogrammme". Les paramètres sont : 
   - llabel ; liste des labels (étiquettes) 
   - ldata ; liste des données
   - style ; style de barre, parmi :
                 RMC_BAR_FLAT = 1
                 RMC_BAR_FLAT_GRADIENT1 = 2
                 RMC_BAR_FLAT_GRADIENT2 = 3
                 RMC_BAR_HOVER = 4
                 RMC_COLUMN_FLAT = 5
                 RMC_BAR_3D = 6
                 RMC_BAR_3D_GRADIENT = 7
                 RMC_COLUMN_3D = 8
                 RMC_COLUMN_3D_GRADIENT = 9
                 RMC_COLUMN_FLUTED = 10
   - rotation ; indique si les barres doivent être verticales (rotation=False) ou horizontales (rotation=True)  

 Il n'y a pas de contrôle, sur la longueur des listes (labels et données), qui doivent être identiques.
 


 addbargroup    addbargroup(llabel,lldata, style=6, rotation=False)

Pour créer un graphique de type "histogrammme multiples" (juxtaposés). Les paramètres sont : 
   - llabel ; liste des labels (étiquettes) 
   - lldata ; liste de listes des données
   - style ; style de barre ; ce sont les mêmes que pour addbarre
   - rotation ; indique si les barres doivent être verticales (rotation=False) ou horizontales (rotation=True)  
  


 addpile    addpile(llabel,lldata, style=6, rotation=False)

Pour créer un graphique de type "histogrammme empilés". Les paramètres sont : 
   - llabel ; liste des labels (étiquettes) 
   - lldata ; liste de listes des données
   - style ; style de barre ; ce sont les mêmes que pour addbarre
   - rotation ; indique si les barres doivent être verticales (rotation=False) ou horizontales (rotation=True)  
 


 addcamembert    addcamembert(llegend,ldata,numdetached=0,transparent=False,style=54)

Pour créer un graphique à secteur (camembert). Les paramètres sont : 
   - llegend ; liste des labels (étiquettes) 
   - ldata ; liste des données
   - numdetached ; numéro du secteur qui sera détaché (mis en exergue) ; à partir de 1  (0 pour aucun)
   - transparent ; permet d'utiliser une (légère) transparence pour le camembert ; utile en superposition (combinaison) de plusieurs graphiques
   - style ; définit le style du diagramme ; peut être :
                 RMC_PIE_FLAT = 51
                 RMC_PIE_GRADIENT = 52
                 RMC_PIE_3D = 53
                 RMC_PIE_3D_GRADIENT = 54
                 RMC_DONUT_FLAT = 55
                 RMC_DONUT_GRADIENT = 56
                 RMC_DONUT_3D = 57
                 RMC_DONUT_3D_GRADIENT = 58
 

 
 addpyramide    addpyramide(llegend,ldata,numdetached=0,transparent=False,style=59)

Permet de créer un graphique pyramidal, dont chaque bande (horizontale) est de taille proportionnelle à la valeur. Les paramètres sont : 
   - llegend ; liste des labels 
   - ldata ; liste des données
   - numdetached ; ignoré pour le moment
   - transparent ; ignoré pour le moment
   - style ; définit le style du diagramme ; peut être :
                 RMC_PYRAMIDE = 59
                 RMC_PYRAMIDE3 = 60
 

 
 addligne    addligne(llabel,ldata,styleline=1,stylenode=10)

Permet de créer un graphique avec ligne(s). N'oubliez pas que l'on peut superposer des graphiques. Les paramètres sont : 
   - llabel ; liste des labels 
   - ldata ; liste des données
   - styleline ; définit le style des lignes ; peut être :
                 RMC_LSTYLE_LINE = 1
                 RMC_LSTYLE_SPLINE = 2
                 RMC_LSTYLE_STAIR = 3
                 RMC_LSTYLE_LINE_AREA = 4       # Draws a line and a transparent area
                 RMC_LSTYLE_SPLINE_AREA = 5     # Draws a spline and a transparent area
                 RMC_LSTYLE_STAIR_AREA = 6      # Draws a stair and a transparent area
   - stylenode ; définit le style des noeuds ; peut être :
                 RMC_SYMBOL_NONE = 0
                 RMC_SYMBOL_BULLET = 21
                 RMC_SYMBOL_ROUND = 1
                 RMC_SYMBOL_DIAMOND = 2
                 RMC_SYMBOL_SQUARE = 3
                 RMC_SYMBOL_STAR = 4
                 RMC_SYMBOL_ARROW_DOWN = 5
                 RMC_SYMBOL_ARROW_UP = 6
                 RMC_SYMBOL_POINT = 7
                 RMC_SYMBOL_CIRCLE = 8
                 RMC_SYMBOL_RECTANGLE = 9
                 RMC_SYMBOL_CROSS = 10
                 RMC_SYMBOL_BULLET_SMALL = 22
                 RMC_SYMBOL_ROUND_SMALL = 11
                 RMC_SYMBOL_DIAMOND_SMALL = 12
                 RMC_SYMBOL_SQUARE_SMALL = 13
                 RMC_SYMBOL_STAR_SMALL = 14
                 RMC_SYMBOL_ARROW_DOWN_SMALL = 15
                 RMC_SYMBOL_ARROW_UP_SMALL = 16
                 RMC_SYMBOL_POINT_SMALL = 17
                 RMC_SYMBOL_CIRCLE_SMALL = 18
                 RMC_SYMBOL_RECTANGLE_SMALL = 19
                 RMC_SYMBOL_CROSS_SMALL = 20
 


 addxy    addxy(labelx,labely,ldatax,ldatay, style=4,label=True)

Permet de créer un graphique de points (x,y). Les paramètres sont : 
   - labelx ; titre de l'axe des abcisses 
   - labely ; titre de l'axe des ordonnées  
   - ldatax ; liste des données (abcisses des points)
   - ldatay ; liste des données (ordonnées des points)
   - style ; définit le style des points ; peut être :
                 RMC_SYMBOL_NONE = 0
                 RMC_SYMBOL_BULLET = 21
                 RMC_SYMBOL_ROUND = 1
                 RMC_SYMBOL_DIAMOND = 2
                 RMC_SYMBOL_SQUARE = 3
                 RMC_SYMBOL_STAR = 4
                 RMC_SYMBOL_ARROW_DOWN = 5
                 RMC_SYMBOL_ARROW_UP = 6
                 RMC_SYMBOL_POINT = 7
                 RMC_SYMBOL_CIRCLE = 8
                 RMC_SYMBOL_RECTANGLE = 9
                 RMC_SYMBOL_CROSS = 10
                 RMC_SYMBOL_BULLET_SMALL = 22
                 RMC_SYMBOL_ROUND_SMALL = 11
                 RMC_SYMBOL_DIAMOND_SMALL = 12
                 RMC_SYMBOL_SQUARE_SMALL = 13
                 RMC_SYMBOL_STAR_SMALL = 14
                 RMC_SYMBOL_ARROW_DOWN_SMALL = 15
                 RMC_SYMBOL_ARROW_UP_SMALL = 16
                 RMC_SYMBOL_POINT_SMALL = 17
                 RMC_SYMBOL_CIRCLE_SMALL = 18
                 RMC_SYMBOL_RECTANGLE_SMALL = 19
                 RMC_SYMBOL_CROSS_SMALL = 20
   - label ; True ou False ; indique sir les valeurs des points seront affichées à leur côté.

 


 Exemple de graphique combiné   

Pour conclure, un exemple un peu plus gros.

import pxchart
g=pxchart.chart(x=10,y=10,larg=1200,haut=800)
g.addregion(x=2,y=2,larg=-2,haut=-2,titre=u"Graphique combiné avec PxChart")
g.addbargroup(  ['1','2','3','4','5','6','7','8','9','10'],
  [  [77,66,55,44,55,66,77,100,90,80],
     [7,6,5,4,5,6,7,28,7,8],
     [12,22,11,14,15,16,7,38,22,11],
     [18,28,14,14,12,10,17,28,20,21],
  ],style=1)
g.addligne( ['1','2','3','4','5','6','7','8','9','10'],
   [77,66,33,11,44,55,22,33,44,55],4,4)
g.addligne( 
   ['Texte1','Texte2','Texte3','Texte4','Texte5','Texte6','Texte7','Texte8','Texte9','Texte10'],
   [60,77,66,33,28,40,28,55,50,66],2,21,color=0XFF8B0000)
g.addwatermark("""PXCHART\r\n.""")
g.generefichier("test.jpg")
 

 
Et voici le résultat de l'exemple de graphique combiné :