# -*- coding: utf-8 -*- # # by Michel Claveau Informatique # http://mclaveau.com # # import time,sys,os,os.path import rmchart GlobalPVersion='0.7' class chart(object): def __init__(self, typ='bar', x=10,y=10, larg=640,haut=480, fond=''): self.nParentHndl=1 self.graf=1 self.regiondefaut=1 if fond=='': bof = rmchart.RMC_CreateChart(self.nParentHndl,self.graf,x,y, larg,haut,rmchart.AliceBlue,rmchart.RMC_CTRLSTYLEFLATSHADOW,True,fond,"Arial",) else: bof = rmchart.RMC_CreateChart(self.nParentHndl,self.graf,x,y, larg,haut,rmchart.AliceBlue,rmchart.RMC_CTRLSTYLEIMAGE,True,fond,"Arial",) def u1252(self, chu): try: if type(chu) is unicode: return chu.encode('cp1252','replace') else: return chu except: return repr(chu) def addregion(self, x=0,y=0, larg=600, haut=400, titre=None): bof = rmchart.RMC_AddRegion(self.graf,x,y,larg,haut,"",False) self.regiondefaut=1 if titre: self.addtitre(titre) def addtitre(self, titre=u"Titre par défaut pour pxchart"): bof = rmchart.RMC_AddCaption(self.graf,self.regiondefaut,titre,rmchart.Coral,rmchart.FloralWhite,12,True) def addgrid(self): bof = rmchart.RMC_AddGrid(self.graf,1,rmchart.Beige,False,0,0,0,0,rmchart.RMC_BICOLOR_NONE) def addaxe(self,position='left', mini=0, maxi=100): if position=='left': bof = rmchart.RMC_AddDataAxis(self.graf,self.regiondefaut,rmchart.RMC_DATAAXISLEFT,mini,maxi,11,8,rmchart.Black,rmchart.Black,rmchart.RMC_LINESTYLESOLID,0,"","","",rmchart.RMC_TEXTCENTER) else: bof = rmchart.RMC_AddDataAxis(self.graf,self.regiondefaut,rmchart.RMC_DATAAXISBOTTOM,mini,maxi,11,8,rmchart.Black,rmchart.Black,rmchart.RMC_LINESTYLESOLID,0,"","","",rmchart.RMC_TEXTCENTER) def addlabel(self,llabel,position='bottom'): sTemp="*".join(llabel) if position=='bottom': bof = rmchart.RMC_AddLabelAxis(self.graf,self.regiondefaut,sTemp,1,len(llabel),rmchart.RMC_LABELAXISBOTTOM,8,rmchart.Black,rmchart.RMC_TEXTCENTER,rmchart.Black,rmchart.RMC_LINESTYLESOLID,"") if position=='left': bof = rmchart.RMC_AddLabelAxis(self.graf,self.regiondefaut,sTemp,1,len(llabel),rmchart.RMC_LABELAXISLEFT,8,rmchart.Black,rmchart.RMC_TEXTCENTER,rmchart.Black,rmchart.RMC_LINESTYLESOLID,"") def addlegende(self,llabel,style=1): sTemp="*".join(llabel) """ #style 0 fond colored (Beige ici) 1 fond transparent 2 fond colored (Beige ici) 3 ombre 4 cadre coins arrondis """ bof = rmchart.RMC_AddLegend(self.graf,self.regiondefaut,sTemp,1,rmchart.Beige,style,rmchart.Black,8,False) def addbargroup(self,llabel,lldata, style=6, rotation=False): self.addgrid() mini=0 lsum=[] for ldata in zip(*lldata): lsum.append(max(ldata)) maxi=max(lsum) if rotation: self.addaxe('bottom',mini,maxi) else: self.addaxe('left',mini,maxi) if rotation: self.addlabel(llabel,'left') else: self.addlabel(llabel) """ #styles de barres: 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 """ long=len(lldata[0]) long=0 for ldata in lldata: bof = rmchart.RMC_AddBarSeries(self.graf,self.regiondefaut,ldata,long,rmchart.RMC_BARGROUP,style,False,0,rotation,1,rmchart.RMC_VLABEL_NONE,1,rmchart.RMC_HATCHBRUSH_OFF) long=0 def addpile(self,llabel,lldata, style=3, rotation=True): self.addgrid() mini=0 lsum=[] for ldata in zip(*lldata): lsum.append(sum(ldata)) maxi=max(lsum) if rotation: self.addaxe('bottom',mini,maxi) else: self.addaxe('left',mini,maxi) if rotation: self.addlabel(llabel,'left') else: self.addlabel(llabel) """ #styles de barres: 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 """ minceur=1 long=len(lldata[0]) for ldata in lldata: bof = rmchart.RMC_AddBarSeries(self.graf,self.regiondefaut,ldata,long,rmchart.RMC_BARSTACKED,style,False,0,rotation,1,rmchart.RMC_VLABEL_NONE,minceur,rmchart.RMC_HATCHBRUSH_OFF) def addbarre(self,llabel,ldata, style=7,rotation=False): self.addgrid() mini=0 maxi=max(ldata) if rotation: self.addaxe('bottom',mini,maxi) else: self.addaxe('left',mini,maxi) if rotation: self.addlabel(llabel,'left') else: self.addlabel(llabel) """ #styles de barres: 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 """ bof = rmchart.RMC_AddBarSeries(self.graf,self.regiondefaut,ldata,len(ldata),rmchart.RMC_BARSINGLE,style,False,0,rotation,1,rmchart.RMC_VLABEL_NONE,1,rmchart.RMC_HATCHBRUSH_OFF) def addcamembert(self,llegend,ldata,numdetached=0,transparent=False,style=54): """ #style 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 """ if len(llegend)>0: self.addlegende(llegend) bof = rmchart.RMC_AddGridlessSeries(self.graf,self.regiondefaut,ldata,len(ldata),0,0,style,rmchart.RMC_FULL,numdetached,transparent,rmchart.RMC_VLABEL_DEFAULT,rmchart.RMC_HATCHBRUSH_OFF,0) def addpyramide(self,llegend,ldata,numdetached=0,transparent=False,style=59): """ #style RMC_PYRAMIDE = 59 RMC_PYRAMIDE3 = 60 """ if len(llegend)>0: self.addlegende(llegend) bof = rmchart.RMC_AddGridlessSeries(self.graf,self.regiondefaut,ldata,len(ldata),0,0,style,rmchart.RMC_FULL,numdetached,transparent,rmchart.RMC_VLABEL_TWIN,rmchart.RMC_HATCHBRUSH_OFF,0) def addligne(self,llabel,ldata,styleline=1,stylenode=10,color=rmchart.Green): """ #style """ self.addgrid() self.addaxe() self.addlabel(llabel) rmchart.RMC_AddLineSeries(self.graf,self.regiondefaut,ldata,len(ldata),0,0,rmchart.RMC_LINE,rmchart.RMC_LINE_CABLE,styleline,False,color,stylenode,2,rmchart.RMC_VLABEL_DEFAULT,rmchart.RMC_HATCHBRUSH_OFF) """ #style de ligne 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 #style de noeud/node 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 """ def addxy(self,labelx,labely,ldatax,ldatay, style=4,label=True): self.addgrid() mini=0 maxix=max(ldatax) maxiy=max(ldatay) if label: typlabel=rmchart.RMC_VLABEL_DEFAULT else: typlabel=rmchart.RMC_VLABEL_NONE bof = rmchart.RMC_AddXAxis(self.graf,self.regiondefaut,rmchart.RMC_XAXISBOTTOM,0,maxix,10,8,rmchart.Coral,rmchart.Coral,rmchart.RMC_LINESTYLEDASH,len(str(maxix)),"",labelx,"",rmchart.RMC_TEXTCENTER) bof = rmchart.RMC_AddYAxis(self.graf,self.regiondefaut,rmchart.RMC_YAXISLEFT,0,maxiy,10,8,rmchart.Blue,rmchart.Blue,rmchart.RMC_LINESTYLEDOT,len(str(maxiy)),"",labely,"",rmchart.RMC_TEXTCENTER) bof = rmchart.RMC_AddXYSeries(self.graf,self.regiondefaut,ldatax,0,ldatay,0,rmchart.DarkBlue,rmchart.RMC_XY_SYMBOL,0,style,rmchart.RMC_XAXISBOTTOM,rmchart.RMC_YAXISLEFT,typlabel) """ #style de noeud/node 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 """ def addwatermark(self,txt="Michel Claveau Informatique"): bof = rmchart.RMC_SetWatermark(txt,rmchart.RMC_USERWMCOLOR,rmchart.RMC_USERWMLUCENT,rmchart.RMC_USERWMALIGN,rmchart.RMC_USERFONTSIZE) def generefichier(self,fichier="chart.png", show=True): bof = rmchart.RMC_Draw2File(self.graf,fichier,) bof = rmchart.RMC_DeleteChart(self.graf) if show: time.sleep(0.25) os.startfile(fichier) if __name__=='__main__': delai=1 test="all" #test="xy" if test=='all' or test=='barre' : g=chart(x=10,y=10,larg=700,haut=400) g.addregion(x=2,y=2,larg=-2,haut=-2,titre=u"Titre de barre pour pxchart") g.addbarre( ['Label 1','Label 2','Label 3','Label 4','Label 5','666','777','888'], [77,66,55,44,35,66,77,99], ) g.generefichier("chart.png") time.sleep(delai) if test=='all' or test=='bargroup' : g=chart(x=10,y=10,larg=700,haut=400) g.addregion(x=2,y=2,larg=-2,haut=-2,titre=u"Titre de bargroup pour pxchart") g.addbargroup( ['Label 1','Label 2','Label 3','Label 4','Label 5','666','777','888'], [ [77,66,55,44,55,66,77,111], [7,6,5,4,5,6,7,28], [12,22,11,14,15,16,7,38], ], ) g.generefichier("chart.png") time.sleep(delai) if test=='all' or test=='pile' : #le total des valeurs est maxi = 100 g=chart(x=10,y=10,larg=700,haut=400) g.addregion(x=2,y=2,larg=-2,haut=-2,titre=u"Titre de pile pour pxchart") g.addpile( ['Label 1','Label 2','Label 3','Label 4','Label 5','666','777','888'], [ [88,66,55,24,55,66,77,48], [6,6,5,4,5,6,7,28], [6,22,11,14,15,16,7,18], ], ) g.generefichier("chart.png") time.sleep(delai) if test=='all' or test=='pile' : g=chart(x=10,y=10,larg=700,haut=400) g.addregion(x=2,y=2,larg=-2,haut=-2,titre=u"Titre de pile pour pxchart") g.addpile( ['Label 1','Label 2','Label 3','Label 4','Label 5','666','777','888'], [ [88,66,55,14,25,66,77,48], [6,6,5,4,5,6,7,28], [6,22,11,14,15,16,7,18], ], style=10, rotation=False, ) g.generefichier("chart.png") time.sleep(delai) if test=='all' or test=='camembert' : g=chart(x=10,y=10,larg=700,haut=400) g.addregion(x=2,y=2,larg=-2,haut=-2,titre=u"Test de camembert pour pxchart") g.addcamembert( ['Label 1','Label 2','Label 3','Label 4','Label 5','666','777'], [77,66,55,22,55,66,77], ) g.generefichier("chart.png") time.sleep(delai) if test=='all' or test=='pyramide' : g=chart(x=10,y=10,larg=640,haut=480,fond='arc640480.jpg') g.addregion(x=2,y=2,larg=-2,haut=-2,titre=u"Test de pyramide pour pxchart") g.addpyramide( ['Label 1','Label 2','Label 3','Label 4','Label 5','666'], [77,66,33,11,44,66], numdetached=1, transparent=True, style=60 ) g.generefichier("chart.png") time.sleep(delai) if test=='all' or test=='ligne' : g=chart(x=10,y=10,larg=700,haut=400) g.addregion(x=2,y=2,larg=-2,haut=-2,titre=u"Test de ligne pour pxchart") g.addligne( ['Label 1','Label 2','Label 3','Label 4','Label 5','666'], [77,66,33,11,44,66], ) g.addwatermark("Ponx & pxchart") g.generefichier("chart.png") time.sleep(delai) if test=='all' or test=='xy' : g=chart(x=10,y=10,larg=700,haut=400) g.addregion(x=2,y=2,larg=-2,haut=-2,titre=u"Titre de XY pour pxchart") g.addxy( u'Axe_des_X',u'Axe_des_Y', [10,44,33,22,60,100,70,30], [60,22,44,13,55,55,30,70], style=21, label=False, ) g.addwatermark("Vive ponx !") g.generefichier("chart.png") time.sleep(delai) if test=='all' or test=='ligne' : g=chart(x=10,y=10,larg=700,haut=400) g.addregion(x=2,y=2,larg=-2,haut=-2,titre=u"Titre de combiné pour pxchart") g.addbargroup( ['Label 1','Label 2','Label 3','Label 4','Label 5','666','777','888'], [ [77,66,55,44,55,66,77,111], [7,6,5,4,5,6,7,28], [12,22,11,14,15,16,7,38], ], style=1 ) g.addligne( ['Label 1','Label 2','Label 3','Label 4','Label 5','666'], [77,66,33,11,44,66], ) g.generefichier("chart.png") time.sleep(delai) if test=='all' or test=='ligne' : g=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") time.sleep(delai)