JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Courbes statistiques Lun 16 Fév 2015 - 17:29 | |
| Une petite sub de tracé de courbes statistiques. En exemple ici la consommation d'eau en m3 depuis l'année 2000, l'explication des paramètres est en commentaire dans la sub. On donne en paramètre le numéro du picture de tracé, la courbe prendra toute la place disponible du picture (qui est réservé à cet effet et qu'il faut dimensionner en fonction de ce qu'on veut représenter): - Code:
-
' EXEMPLE D'APPEL DE LA SUB Courbes(): DESSIN DE COURBES STATISTIQUES DIM p%,Vxmin,Vxmax,Stpx,Vymin,Vymax,Stpy,ch$,coul%
WIDTH 0,820: HEIGHT 0,530: color 0,0,255,255 p% = 1: PICTURE p%: WIDTH p%,800: HEIGHT p%,480 ch$="2000,41,2001,40,2002,58,2003,44,2004,39,2005,35,2006,88,2007,76,2008,92,2009,75" ch$=ch$+",2010,78,2011,81,2012,85,2013,90,2014,40" Vxmin = 2000: Vxmax = 2015: Stpx = 1 Vymin = 10: Vymax = 120: Stpy = 10 coul% = 128*65536: ' rouge Courbes(p%,Vxmin,Vxmax,Stpx,Vymin,Vymax,Stpy,ch$,coul%,"m³") end ch$="2000,164.38,2001,166.15,2002,222.82,2003,181.73,2004,168.04,2005,159.77" ch$=ch$+",2006,407.78,2007,316.13,2008,361.85,2009,328.96,2010,337.89,2011,373.92" ch$=ch$+",2012,402.06,2013,436.31,2014,199.60" Vxmin = 2000: Vxmax = 2015: Stpx = 1 vymin = 100: Vymax = 500: Stpy = 50 coul% = 255: ' bleu Courbes(p%,Vxmin,Vxmax,Stpx,Vymin,Vymax,Stpy,ch$,coul%,"") END ' ============================================================================== SUB Courbes(p%,Vxmin,Vxmax,Stpx,Vymin,Vymax,Stpy,ch$,coul%,legy$) ' **** Tracé de courbes statistiques de valeurs dans le picture p% **** ' **** p%: n° de l'objet picture réservé au tracé et dimensionné en conséquence ' **** Vxmin, Vxmax, Stpx: valeurs mini, maxi et pas de progression (graduations) axe des x ' **** Vymin, Vymax, Stpy: valeurs mini, maxi et pas de progression axe des y ' **** ch$: chaîne de données de la forme valx1,valy1,valx2,valy2,... etc. ' **** coul%: couleur du tracé (de la forme R*65536+G*256+B) ' **** legy$: légende éventuelle axe des ordonnées DIM_LOCAL wp%,hp%,ofx%,ofy%,inx%,iny%,i%,j%,mgh%,mgd%,wr%,hr%,vx,vy,x%,y%,r%,g%,b% mgh% = 20: mgd% = 20: ' marges haut et droite ofx% = 50: ofy% = 30: ' distance des axes par rapport aux bords gauche et bas du picture wr% = WIDTH(p%)-ofx%-mgd%: hr% = HEIGHT(p%)-ofy%-mgh%: ' dimensions disponibles restantes 2D_TARGET_IS p%: 2D_PEN_WIDTH 1: 2D_PEN_COLOR 0,0,0 PRINT_TARGET_IS p%: FONT_NAME p%,"Consolas": FONT_SIZE p%,9: FONT_COLOR p%,0,0,0 FONT_BOLD p% 2D_LINE ofx%,mgh%+hr%,ofx%+wr%,mgh%+hr%: ' axe des x 2D_LINE ofx%,mgh%,ofx%,mgh%+hr%: ' axe des y i% = (Vxmax-Vxmin)/Stpx: inx% = wr%/i%: ' intervalle des graduations x en pixels i% = (Vymax-Vymin)/Stpy: iny% = hr%/i%: ' intervalle des graduations y en pixels 2D_PEN_DOT: ' Tracé des axes intermédiaires en pointillés vx = Vxmin FOR i% = 0 TO wr% STEP inx%: ' axe des abscisses (x) et légendes IF i%>0 THEN 2D_LINE ofx%+i%,mgh%,ofx%+i%,mgh%+hr% PRINT_LOCATE ofx%+i%-15,mgh%+hr%+5: PRINT STR$(vx): vx = vx+Stpx NEXT i% vy = Vymax r%=INT(coul%/65536): g%=INT(coul%/256)-r%*256: b%=BIN_AND(coul%,255) FONT_COLOR p%,r%,g%,b%: ' légendes V FOR i% = mgh% TO mgh%+hr% STEP iny%: ' axe des ordonnées (y) et légendes IF i%<(mgh%+hr%-10) THEN 2D_LINE ofx%,i%,ofx%+wr%,i% PRINT_LOCATE ofx%-TEXT_WIDTH(STR$(vy),p%)-5,i%-8: PRINT STR$(vy) vy = vy-Stpy NEXT i% IF legy$<>"" THEN PRINT_LOCATE ofx%-TEXT_WIDTH(legy$,p%)-5,mgh%+12: PRINT legy$ 2D_PEN_WIDTH 3: 2D_PEN_COLOR r%,g%,b%: ' couleur du tracé, épaisseur 3 pixels i% = INSTR(ch$,","): j%=-1: ' Tracé de la courbe des valeurs successives WHILE i% > 0 vx=VAL(LEFT$(ch$,i%-1)): ch$=RIGHT_POS$(ch$,i%+1): i%=INSTR(ch$,",") IF i%=0 vy=VAL(ch$) ELSE vy=VAL(LEFT$(ch$,i%-1)): ch$=RIGHT_POS$(ch$,i%+1): i%=INSTR(ch$,",") END_IF IF vx=0 AND j%>-1 THEN EXIT_WHILE ' Tracé du trait de jonction au point correspondant aux valeurs vx et vy x% = ofx%+(vx-Vxmin)*inx%/Stpx y% = mgh%+hr%-(vy-Vymin)*iny%/Stpy IF j%=-1 2D_LINE x%,y%,x%,y%: j% = x%: ' point de départ initial ELSE 2D_POLY_TO x%,y%: ' jonction END_IF IF i%=0 THEN EXIT_WHILE END_WHILE END_SUB ' ============================================================================== La chaîne de données ch$ contient la liste des coordonnées (valeurs) x et y des points successifs, toutes ces valeurs étant séparées par des virgules (les valeurs pouvant être fractionnaires). On peut superposer plusieurs courbes (ici en faisant sauter le 'end' de la ligne 11: courbe de consommation + courbe de facture, mais ça peut devenir un peu confus, notamment pour l'échelle des ordonnées), en faisant des appels successifs à la sub: 17/02 j'ai ajouté un paramètre: légende éventuelle (succincte) de l'axe vertical, ici 'm³' (j'ai modifié la 1ère image), et amélioré le positionnement des valeurs de cet axe vertical (avec une police différente).
Dernière édition par JL35 le Mar 17 Fév 2015 - 17:08, édité 5 fois | |
|