Page 1 sur 1

graduer les axes en ne commençant pas à zéro

Posté : lun. 18 févr. 2013, 11:36
par StephaneD
Bonjour,

Je cherche à faire un repère comme celui-ci (page 4):
https://docs.google.com/viewer?url=http ... pt2009.pdf

(annexe sujet CGRH, Antilles sept 2009)
Mon problème, c'est que je ne sais pas comment faire démarrer mes graduations à 4800.
J'ai bien essayé ceci

// DEBUT

settings.outformat='pdf';

import geometry;
import graph_pi;
usepackage("mathrsfs");

unitsize(1cm);

real xmin=-0.1, xmax=15.5, ymin=4800, ymax=8000;

real ech=1;

graphicrules(xunit=1cm, yunit=0.001cm,
xmin=xmin, xmax=xmax,
ymin=ymin, ymax=ymax,
crop=Crop
);

// Définition et tracé de la grille

grid(xmin, xmax, ymin, ymax,
xStep=1, xstep=1,
yStep=1000, ystep=250,
pTick=0.5bp+.4white,
ptick=0.3bp+.8white,
above=true
);

// Définition et tracé des axes

cartesianaxis(xticks=Ticks(scale(ech)*Label(fontsize(10),Fill(white)),
Step=1, step=1,
Size=0.75mm, size=.5mm,
NoZero,
pTick=1bp+black, ptick=grey),
yticks=Ticks(scale(ech)*Label(fontsize(10),Fill(white)),
Step=500, step=500,
Size=0.75mm, size=.5mm,
NoZero,
pTick=1bp+black, ptick=grey),
Arrow);



// La figure

point ja = (1, 5000);
dot("", ja, S, 6bp+blue);

// Les limites du dessin

real factxmin=0.1;
real factxmax=0.05;
real factymin=0.1;
real factymax=0.5;

xlimits(xmin-factxmin*(xmax-xmin),xmax+factxmax*(xmax-xmin),Crop);
ylimits(ymin-factymin*(ymax-ymin),ymax+factymax*(ymax-ymin),Crop);


shipout(bbox(1mm,Fill(white)));

// FIN

mais alors je n'ai plus d'axe des abscisses.
Quelqu'un aurait-il une idée?
Merci d'avance pour toute piste.

Re: graduer les axes en ne commençant pas à zéro

Posté : lun. 18 févr. 2013, 13:00
par GM
Je vais y réfléchir... mais ce sera une solution sans graph_pi car cartesianaxis ne me semble pas prévu pour.

Re: graduer les axes en ne commençant pas à zéro

Posté : lun. 18 févr. 2013, 13:36
par GM
Voilà... avec volontairement certains traits (par exemple ceux en orange) dont le style sera à changer... mais c'était pour montrer qu'il y a différents lieux de réglages.

Figure asymptote 0571f7207b12767b13c0099576cfb29b
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import graph;
  2.  
  3. //unitsize(1cm,0.01cm);
  4. unitsize(.5cm,0.005cm);
  5.  
  6. real xmin=0, xmax=13, xstep=1;
  7. real ymin=4800, ymax=6800, ystep=100;
  8. real[] xi={1,2,3,4,5,6,7,8,9,10};
  9. int[] yi={5000,5150,5300,5430,5570,5740,5860,6000,6120,6260};
  10. path polygone=graph(xi,yi);
  11.  
  12. marker croix=marker(scale(2)*rotate(45)*cross(4),.6bp+blue);
  13. // draw(polygone,croix); // points + polygone
  14. draw(polygone,nullpen,croix); // uniquement les points marqués d'une croix
  15.  
  16. // La grille
  17. xlimits(xmin,xmax);
  18. ylimits(ymin,ymax);
  19. pen pTick=orange;
  20. xaxis(BottomTop,pTick,Ticks("%",Step=5, step=1,
  21. pTick=gray,ptick=dotted,
  22. extend=true));
  23. yaxis(LeftRight,pTick,Ticks("%",Step=500, step=100,
  24. pTick=gray,ptick=dotted,
  25. extend=true));
  26. // Les axes
  27. pen stylo=fontsize(8pt);
  28. xequals(0, ymin,ymax+ystep,stylo,RightTicks(Size=1,end=false,endlabel=false,Step=ystep),Arrow);
  29. yequals(4800,xmin,xmax+xstep,stylo,LeftTicks(Size=1,end=false,endlabel=false,Step=xstep),Arrow);
  30. label("$x_i$ (rang)",(xmax+xstep,ymin),SE,stylo);
  31. label("$y_i$ (montant des charges en centaines d'euros)",(xmin,ymax+ystep),E,stylo);

Re: graduer les axes en ne commençant pas à zéro

Posté : lun. 18 févr. 2013, 14:34
par StephaneD
Super!! Merci beaucoup :D

PS: en plus ça me donne plein d'idées à essayer!

Re: graduer les axes en ne commençant pas à zéro

Posté : lun. 18 févr. 2013, 14:39
par GM

Re: graduer les axes en ne commençant pas à zéro

Posté : mar. 19 févr. 2013, 09:37
par GM


Je viens de modifier le premier des deux... pour y remplacer un style de pointillés :

Code : Tout sélectionner

linetype("4 4")

par un autre

Code : Tout sélectionner

.2mm+linetype("0 "+ string(1mm),offset=0,scale=false,adjust=false)


Le nombre de points est ainsi adapté aux graduations.

Figure asymptote 05147a5b88033816707ef87804662094
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import graph;
  2.  
  3. //unitsize(1cm,0.01cm);
  4. unitsize(.5cm,0.005cm);
  5.  
  6. real xmin=0, xmax=12, xstep=1;
  7. real ymin=4800, ymax=6500, ystep=100;
  8. real[] xi={1,2,3,4,5,6,7,8,9,10};
  9. int[] yi={5000,5150,5300,5430,5570,5740,5860,6000,6120,6260};
  10. path polygone=graph(xi,yi);
  11.  
  12. marker croix=marker(scale(2)*cross(4),.6bp+blue);
  13. // draw(polygone,croix); // points + polygone
  14. draw(polygone,nullpen,croix); // uniquement les points marqués d'une croix
  15.  
  16. // La grille
  17. xlimits(xmin,xmax);
  18. ylimits(ymin,ymax);
  19. pen pBord=nullpen,
  20. pGrille=.2mm+linetype("0 "+ string(1mm),offset=0,scale=false,adjust=false);
  21. xaxis(BottomTop,pBord,Ticks("%",Step=5, step=1,
  22. pTick=gray,ptick=pGrille,
  23. extend=true));
  24. yaxis(LeftRight,pBord,Ticks("%",Step=500, step=100,
  25. pTick=gray,ptick=pGrille,
  26. extend=true));
  27. // Les axes
  28. pen stylo=fontsize(8pt);
  29. xequals(0, ymin,ymax+ystep,stylo,RightTicks(Size=1,end=false,endlabel=false,Step=ystep),Arrow);
  30. yequals(4800,xmin,xmax+xstep,stylo,LeftTicks(Size=1,end=false,endlabel=false,Step=xstep),Arrow);
  31. label("$x_i$ (rang)",(xmax+xstep,ymin),SE,stylo);
  32. label("$y_i$ (montant des charges en centaines d'euros)",(xmin,ymax+ystep),E,stylo);