Page 1 sur 1

Déplacer l'origine d'un repère

Posté : dim. 9 déc. 2012, 21:07
par Fabrice
Bonsoir,
Je ne sais pas si le titre est suffisamment explicite, mais le code le sera :

Code : Tout sélectionner

import graph;
usepackage("ucs");
usepackage("inputenc","utf8x");
usepackage("babel","french");
usepackage("mathrsfs,esvect,kpfonts");
arrowhead guillaumetellHead=HookHead(dir=10);
guillaumetellHead.size=new real(pen p)
{
  static real hcoef=5;
  return hcoef*arrowtexfactor*linewidth(p);
};
arrowbar guillaumetell=Arrow(guillaumetellHead);
unitsize(1cm,0.1cm);
real xmin=7, xmax=14, xstep=1;
real ymin=0, ymax=110, ystep=10;
xlimits(xmin,xmax);
ylimits(ymin,ymax);
pen p=fontsize(8pt);
pen pTick=lightgray;
real[] xi={7,8,9,10,11,12,13};
int[] fi={100,92,76,66,60,35,0};
path polygone=graph(xi,fi);
draw(polygone);
xaxis(BottomTop,pTick,LeftTicks("%",extend=true));
yaxis(LeftRight,pTick,RightTicks("%",extend=true));
xequals(7,ymin,ymax,p,LeftTicks(Size=1,extend =true,end=false,endlabel=false,Step=ystep,pTick=pTick),guillaumetell);
yequals(0,xmin,xmax,p,RightTicks(Size=1,extend=true,end=false,endlabel=false,Step=xstep,pTick=pTick),guillaumetell);
labelx("Heure",13.5,N,p);
labely("Fréquence cumulée décroissante (en \,\%)",108,E,p);
dot(polygone);
dot((0,0),red);

Je souhaiterais que l'origine de mon repère se trouve au point rouge.
Merci.

PS :
*** Tentative de compilation d'un code Asymptote - Erreur 2 ***
[ Un des mots utilisés dans le code fait partie de la "blacklist". ]

Re: Déplacer l'origine d'un repère

Posté : dim. 9 déc. 2012, 21:18
par GM
Bonsoir
tu veux que cela commence à 0 et non à 7 si j'ai bien compris.

Mais alors, pourquoi mets-tu ces deux lignes :

Code : Tout sélectionner

real xmin=7, xmax=14, xstep=1;
...
...
xequals(7,ymin,ymax,p,LeftTicks(Size=1,extend =true,end=false,endlabel=false,Step=ystep,pTick=pTick),guillaumetell);


Change les deux 7 en 0 et cela devrait aller mieux.

Re: Déplacer l'origine d'un repère

Posté : lun. 10 déc. 2012, 15:50
par GM
Pour la compilation sur le forum, il suffit d'enlever tous les usepackage inutiles pour illustrer le problème.
(Ceux qui pourraient être, à la rigueur, utiles, (mathrsfs et babel) sont déjà chargés.)

Figure asymptote 44c6b03a67fc261acc4a1276f3dfc3bf
*** 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. arrowhead guillaumetellHead=HookHead(dir=10);
  3. guillaumetellHead.size=new real(pen p)
  4. {
  5. static real hcoef=5;
  6. return hcoef*arrowtexfactor*linewidth(p);
  7. };
  8. arrowbar guillaumetell=Arrow(guillaumetellHead);
  9. unitsize(.5cm,0.05cm);
  10. real xmin=0, xmax=14, xstep=1;
  11. real ymin=0, ymax=110, ystep=10;
  12. xlimits(xmin,xmax);
  13. ylimits(ymin,ymax);
  14. pen p=fontsize(8pt);
  15. pen pTick=lightgray;
  16. real[] xi={7,8,9,10,11,12,13};
  17. int[] fi={100,92,76,66,60,35,0};
  18. path polygone=graph(xi,fi);
  19. draw(polygone);
  20. xaxis(BottomTop,pTick,LeftTicks("%",extend=true));
  21. yaxis(LeftRight,pTick,RightTicks("%",extend=true));
  22. xequals(0,ymin,ymax,p,LeftTicks(Size=1,extend =true,end=false,endlabel=false,Step=ystep,pTick=pTick),guillaumetell);
  23. yequals(0,xmin,xmax,p,RightTicks(Size=1,extend=true,end=false,endlabel=false,Step=xstep,pTick=pTick),guillaumetell);
  24. labelx("Heure",13.5,N,p);
  25. labely("Fréquence cumulée décroissante (en \,\%)",108,E,p);
  26. dot(polygone);
  27. dot((0,0),red);

Re: Déplacer l'origine d'un repère

Posté : lun. 10 déc. 2012, 20:44
par Fabrice
Bonsoir,
GM a écrit :tu veux que cela commence à 0 et non à 7 si j'ai bien compris.

je me suis probablement mal exprimé !
En fait, je veux que les graduations sur l'axe des abscisses commencent à 7, mais que la nouvelle origine du repère(7,0) se trouve en (0,0).

Figure asymptote c9590198a7d3a0df711961162e2aaa26
*** 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. arrowhead guillaumetellHead=HookHead(dir=10);
  3. guillaumetellHead.size=new real(pen p)
  4. {
  5. static real hcoef=5;
  6. return hcoef*arrowtexfactor*linewidth(p);
  7. };
  8. arrowbar guillaumetell=Arrow(guillaumetellHead);
  9. unitsize(1cm,0.1cm);
  10. real xmin=7, xmax=14, xstep=1;
  11. real ymin=0, ymax=110, ystep=10;
  12. xlimits(xmin,xmax);
  13. ylimits(ymin,ymax);
  14. pen p=fontsize(8pt);
  15. pen pTick=lightgray;
  16. real[] xi={7,8,9,10,11,12,13};
  17. int[] fi={100,92,76,66,60,35,0};
  18. path polygone=graph(xi,fi);
  19. draw(polygone);
  20. xaxis(BottomTop,pTick,LeftTicks("%",extend=true));
  21. yaxis(LeftRight,pTick,RightTicks("%",extend=true));
  22. xequals(7,ymin,ymax,p,LeftTicks(Size=1,extend =true,end=false,endlabel=false,Step=ystep,pTick=pTick),guillaumetell);
  23. yequals(0,xmin,xmax,p,RightTicks(Size=1,extend=true,end=false,endlabel=false,Step=xstep,pTick=pTick),guillaumetell);
  24. labelx("Heure",13.5,N,p);
  25. labely("Fréquence cumulée décroissante (en \,\%)",108,E,p);
  26. dot(polygone);
  27. dot((0,0),red);

Je peux effectuer une translation de vecteur (-7,0), mais il y a peut-être une autre solution.
Merci.

Re: Déplacer l'origine d'un repère

Posté : lun. 10 déc. 2012, 21:07
par GM
Des extend=true en trop :

Figure asymptote c09125b226033d35185ec57f6e50adb8
*** 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. arrowhead guillaumetellHead=HookHead(dir=10);
  3. guillaumetellHead.size=new real(pen p)
  4. {
  5. static real hcoef=5;
  6. return hcoef*arrowtexfactor*linewidth(p);
  7. };
  8. arrowbar guillaumetell=Arrow(guillaumetellHead);
  9. unitsize(1cm,0.1cm);
  10. real xmin=7, xmax=14, xstep=1;
  11. real ymin=0, ymax=110, ystep=10;
  12. xlimits(xmin,xmax);
  13. ylimits(ymin,ymax);
  14. pen p=fontsize(8pt);
  15. pen pTick=lightgray;
  16. real[] xi={7,8,9,10,11,12,13};
  17. int[] fi={100,92,76,66,60,35,0};
  18. path polygone=graph(xi,fi);
  19. draw(polygone);
  20. xaxis(BottomTop,pTick,LeftTicks("%",extend=true));
  21. yaxis(LeftRight,pTick,RightTicks("%",extend=true));
  22. xequals(7,ymin,ymax,p,LeftTicks(Size=1,end=false,endlabel=false,Step=ystep,pTick=pTick),guillaumetell);
  23. yequals(0,xmin,xmax,p,RightTicks(Size=1,end=false,endlabel=false,Step=xstep,pTick=pTick),guillaumetell);
  24. labelx("Heure",13.5,N,p);
  25. label(minipage("Fréquence cumulée décroissante (en \,\%)",50bp),(7,108),E,p);
  26. dot(polygone);

Re: Déplacer l'origine d'un repère

Posté : mar. 11 déc. 2012, 16:11
par Fabrice
Bonjour Gaetan,
GM a écrit :Des extend=true en trop :

La force de l'habitude, merci.
Une petite remarque : j'avais fait le même graphique avec PSTricks (http://www.fileupyours.com/view/310238/forum_1.pdf), et j'ai l'impression que le graphique est "mieux fini". En effet, un zoom à 400 % montre que les graduations de la grille ne "débordent pas", ce qui n'est pas le cas avec le graphique réalisé avec Asymptote.
Mais ce n'est qu'un détail.

Re: Déplacer l'origine d'un repère

Posté : mar. 11 déc. 2012, 19:12
par GM
Fabrice a écrit :Une petite remarque : j'avais fait le même graphique avec PSTricks (http://www.fileupyours.com/view/310238/forum_1.pdf), et j'ai l'impression que le graphique est "mieux fini". En effet, un zoom à 400 % montre que les graduations de la grille ne "débordent pas", ce qui n'est pas le cas avec le graphique réalisé avec Asymptote.


Il y a des graduations qui débordent si tu demandes qu'elles débordent. ;-)

Figure asymptote 341ddb57374f97ec8e1cdf3d7010621c
*** 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. arrowhead guillaumetellHead=HookHead(dir=10);
  3. guillaumetellHead.size=new real(pen p)
  4. {
  5. static real hcoef=5;
  6. return hcoef*arrowtexfactor*linewidth(p);
  7. };
  8. arrowbar guillaumetell=Arrow(guillaumetellHead);
  9. unitsize(1cm,0.1cm);
  10. real xmin=7, xmax=14, xstep=1;
  11. real ymin=0, ymax=110, ystep=10;
  12. xlimits(xmin,xmax);
  13. ylimits(ymin,ymax);
  14. pen p=fontsize(8pt);
  15. pen pTick=gray;
  16. real[] xi={7,8,9,10,11,12,13};
  17. int[] fi={100,92,76,66,60,35,0};
  18. path polygone=graph(xi,fi);
  19. draw(polygone);
  20. xequals(7,ymin,ymax,p,RightTicks(Size=1,end=false,endlabel=false,Step=ystep),guillaumetell);
  21. yequals(0,xmin,xmax,p,LeftTicks(Size=1,end=false,endlabel=false,Step=xstep),guillaumetell);
  22. xaxis(BottomTop,pTick,Ticks("%",extend=true));
  23. yaxis(LeftRight,pTick,Ticks("%",extend=true));
  24. labelx("Heure",13.5,N,p);
  25. label(minipage("Fréquence cumulée décroissante (en \,\%)",50bp),(7,108),E,p);
  26. dot(polygone);

Re: Déplacer l'origine d'un repère

Posté : mer. 12 déc. 2012, 14:44
par Fabrice
Bonjour,
The axis is drawn before any existing objects in pic unless above=true

Il va falloir que je fasse l'effort de lire un peu les documentations.
Merci.

Re: Déplacer l'origine d'un repère

Posté : mer. 12 déc. 2012, 17:21
par GM
Fabrice a écrit :Bonjour,
The axis is drawn before any existing objects in pic unless above=true

Il va falloir que je fasse l'effort de lire un peu les documentations.
Merci.

Je n'ai pas de suite compris la remarque... avant de réaliser que j'avais oublié un above=false que j'avais ajouté temporairement en oubliant de l'enlever : il ne réglait pas le problème dans ton cas.
Le problème était notamment une inversion des LeftTicks et RightTicks (j'imagine que la confusion venait du fait que si xaxis ajoute un axe horizontal, xequals en rajoute un vertical donc il ne fallait pas demander les graduations à gauche de l'axe vertical)... avec une couleur donnée au Ticks identique à celle des lignes de la grille... ce qui donnait une impression de lignes qui ne s'arrêtaient pas où tu voulais.

Mais effectivement, il faut connaitre above=false pour d'autres situations.