Page 1 sur 1

Legend()

Posté : mar. 27 nov. 2012, 04:25
par maurice
Bonjour,

J'avais commencé par écrire ça :

Figure asymptote cccf71aba621dd480b625bfd9208b06b
*** 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. size(7cm);
  4.  
  5. real[] V={2,3,2,2,6,3}, R={6,4,3,2,1,2}, P={1,2,2,4,3,6};
  6. real[] X={1,2,3,4,5,6};
  7.  
  8. path Virginia=graph(X,V);
  9. path Roger=graph(X,R);
  10. path Pascale=graph(X,P);
  11.  
  12. marker Vi=marker(scale(4)*polygon(3), filltype=FillDraw(green), green);
  13. marker Ro=marker(scale(3)*unitcircle,filltype=FillDraw(blue), blue);
  14. marker Pa=marker(scale(4)*polygon(4), filltype=FillDraw(red), red);
  15.  
  16. draw(Virginia, green, "Virginia");
  17. draw(Roger, blue, "Roger");
  18. draw(Pascale, red, "Pascale");
  19.  
  20. for(int i=0 ; i<6; ++i) {
  21. draw((X[i],V[i]), Vi);
  22. draw((X[i],R[i]), Ro);
  23. draw((X[i],P[i]), Pa);
  24. }
  25.  
  26. xaxis(0,7.5,ticks=RightTicks(NoZero, Step=1, step=1), Arrow);
  27. yaxis(LeftRight, 0,7,gray,ticks=Ticks("%", extend=true, Step=1, step=0, end=true));
  28. yaxis(0,7.7, ticks=(RightTicks(NoZero, Step=1, step=0)), Arrow);
  29. attach(legend(),point(N),(0,0),UnFill);


Première question : est-on obligé de dessiner les chemins puis les points en deux étapes séparées ? Pas moyen de tracer les points par une commande du genre dot(chemin, Vi) ?

Deuxième question : dans la ligne

Code : Tout sélectionner

attach(legend(),point(N),(0,0),UnFill);
à quoi correspond exactement le point(N) et le pair qui est juste après.
Dans certains exemple sur le site de P. Ivaldi, on trouve

Code : Tout sélectionner

attach(legend(),point(E),20E,UnFill);
. J'ai changé le (0,0) et/ou le 20E et je ne comprends pas bien le décalage qui est produit par rapport au valeurs entrées.

Autre problème : C'est prévu pour être imprimé en noir et blanc et que j'aurais aimé avoir un cercle, un carré et un triangle dans la légende, au mulieu de la ligne par exemple.

Du coup j'ai fait ça avec une picture :

Figure asymptote 174faa9ba767c2e5b3ab449c3d086391
*** 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. size(7cm);
  4.  
  5. real[] V={2,3,2,2,6,3}, R={6,4,3,2,1,2}, P={1,2,2,4,3,6};
  6. real[] X={1,2,3,4,5,6};
  7.  
  8. path Virginia=graph(X,V);
  9. path Roger=graph(X,R);
  10. path Pascale=graph(X,P);
  11.  
  12. marker Vi=marker(scale(4)*polygon(3), filltype=FillDraw(green), green);
  13. marker Ro=marker(scale(3)*unitcircle,filltype=FillDraw(blue), blue);
  14. marker Pa=marker(scale(4)*polygon(4), filltype=FillDraw(red), red);
  15.  
  16. draw(Virginia, green);
  17. draw(Roger, blue);
  18. draw(Pascale, red);
  19.  
  20. for(int i=0 ; i<6; ++i) {
  21. draw((X[i],V[i]), Vi);
  22. draw((X[i],R[i]), Ro);
  23. draw((X[i],P[i]), Pa);
  24. }
  25.  
  26. xaxis(0,7.5,ticks=RightTicks(NoZero, Step=1, step=1), Arrow);
  27. yaxis(LeftRight, 0,7,gray,ticks=Ticks("%", extend=true, Step=1, step=0, end=true));
  28. yaxis(0,7.7, ticks=(RightTicks(NoZero, Step=1, step=0)), Arrow);
  29.  
  30. picture pic;
  31. unitsize(pic, 0.35cm);
  32. draw(pic, (0,0), Vi); label(pic, "\small Virginia", (0,0), 3E);
  33. draw(pic, (0,-1), Ro); label(pic, "\small Roger", (0,-1), 3E);
  34. draw(pic, (0,-2), Pa); label(pic, "\small Pascale", (0,-2), 3E);
  35. //shipout(bbox(pic, 2mm));
  36. add(pic.fit(), (2,7.35));


deuxième question : peut-on faire uniquement avec légend() ? Si oui comment ? Sinon y'a-t-il un moyen plus simple que de passer par picture ?

Ensuite j'ai voulu ajouté un cadre autour de la légende ; j'ai donc ajouté la ligne :

Code : Tout sélectionner

shipout(bbox(pic, 2mm));


et j'obtiens :

Figure asymptote e2c6fa079e5c50dcefc17bfbc780a76b
*** 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. size(7cm);
  4.  
  5. real[] V={2,3,2,2,6,3}, R={6,4,3,2,1,2}, P={1,2,2,4,3,6};
  6. real[] X={1,2,3,4,5,6};
  7.  
  8. path Virginia=graph(X,V);
  9. path Roger=graph(X,R);
  10. path Pascale=graph(X,P);
  11.  
  12. marker Vi=marker(scale(4)*polygon(3), filltype=FillDraw(green), green);
  13. marker Ro=marker(scale(3)*unitcircle,filltype=FillDraw(blue), blue);
  14. marker Pa=marker(scale(4)*polygon(4), filltype=FillDraw(red), red);
  15.  
  16. draw(Virginia, green);
  17. draw(Roger, blue);
  18. draw(Pascale, red);
  19.  
  20. for(int i=0 ; i<6; ++i) {
  21. draw((X[i],V[i]), Vi);
  22. draw((X[i],R[i]), Ro);
  23. draw((X[i],P[i]), Pa);
  24. }
  25.  
  26. xaxis(0,7.5,ticks=RightTicks(NoZero, Step=1, step=1), Arrow);
  27. yaxis(LeftRight, 0,7,gray,ticks=Ticks("%", extend=true, Step=1, step=0, end=true));
  28. yaxis(0,7.7, ticks=(RightTicks(NoZero, Step=1, step=0)), Arrow);
  29.  
  30. picture pic;
  31. unitsize(pic, 0.35cm);
  32. draw(pic, (0,0), Vi); label(pic, "\small Virginia", (0,0), 3E);
  33. draw(pic, (0,-1), Ro); label(pic, "\small Roger", (0,-1), 3E);
  34. draw(pic, (0,-2), Pa); label(pic, "\small Pascale", (0,-2), 3E);
  35. shipout(bbox(pic, 2mm));
  36. add(pic.fit(), (2,7.25));


Troisième question : qu'est ce qui cloche ? Quelle est la bonne méthode ?

Merci d'avance.

Bruno

Re: Legend()

Posté : mar. 27 nov. 2012, 04:58
par maurice
J'ai trouvé avec legned() :

Figure asymptote c1b93c15656824c80eb16a5a1cf7ab6d
*** 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. size(7cm);
  4.  
  5. real[] V={2,3,2,2,6,3}, R={6,4,3,2,1,2}, P={1,2,2,4,3,6};
  6. real[] X={1,2,3,4,5,6};
  7.  
  8. path Virginia=graph(X,V);
  9. path Roger=graph(X,R);
  10. path Pascale=graph(X,P);
  11.  
  12. marker Vi=marker(scale(4)*polygon(3), filltype=FillDraw(green), green);
  13. marker Ro=marker(scale(3)*unitcircle,filltype=FillDraw(blue), blue);
  14. marker Pa=marker(scale(4)*polygon(4), filltype=FillDraw(red), red);
  15.  
  16. draw(Virginia, green, "Virginia", Vi);
  17. draw(Roger, blue, "Roger", Ro);
  18. draw(Pascale, red, "Pascale", Pa);
  19.  
  20. for(int i=0 ; i<6; ++i) {
  21. draw((X[i],V[i]), Vi);
  22. draw((X[i],R[i]), Ro);
  23. draw((X[i],P[i]), Pa);
  24. }
  25.  
  26. xaxis(0,7.5,ticks=RightTicks(NoZero, Step=1, step=1), Arrow);
  27. yaxis(LeftRight, 0,7,gray,ticks=Ticks("%", extend=true, Step=1, step=0, end=true));
  28. yaxis(0,7.7, ticks=(RightTicks(NoZero, Step=1, step=0)), Arrow);
  29.  
  30. attach(legend(),point(N),(0,0),UnFill);


Reste ma question sur le positionnement du cadre dans

Code : Tout sélectionner

attach(legend(),point(N),(0,0),UnFill);

le point(N) je vois bien mais le pair qui vient après ?...

Bruno

Re: Legend()

Posté : mar. 27 nov. 2012, 07:20
par GM
Bonjour,
maurice a écrit :le point(N) je vois bien mais le pair qui vient après ?...

Il suffit de le changer pour le comprendre ;-).

Figure asymptote c9304f9dbd145535442acd9e08cc68c3
*** 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. size(7cm);
  4.  
  5. real[] V={2,3,2,2,6,3}, R={6,4,3,2,1,2}, P={1,2,2,4,3,6};
  6. real[] X={1,2,3,4,5,6};
  7.  
  8. path Virginia=graph(X,V);
  9. path Roger=graph(X,R);
  10. path Pascale=graph(X,P);
  11.  
  12. marker Vi=marker(scale(4)*polygon(3), filltype=FillDraw(green), green);
  13. marker Ro=marker(scale(3)*unitcircle,filltype=FillDraw(blue), blue);
  14. marker Pa=marker(scale(4)*polygon(4), filltype=FillDraw(red), red);
  15.  
  16. draw(Virginia, green, "Virginia", Vi);
  17. draw(Roger, blue, "Roger", Ro);
  18. draw(Pascale, red, "Pascale", Pa);
  19.  
  20. for(int i=0 ; i<6; ++i) {
  21. draw((X[i],V[i]), Vi);
  22. draw((X[i],R[i]), Ro);
  23. draw((X[i],P[i]), Pa);
  24. }
  25.  
  26. xaxis(0,7.5,ticks=RightTicks(NoZero, Step=1, step=1), Arrow);
  27. yaxis(LeftRight, 0,7,gray,ticks=Ticks("%", extend=true, Step=1, step=0, end=true));
  28. yaxis(0,7.7, ticks=(RightTicks(NoZero, Step=1, step=0)), Arrow);
  29.  
  30. attach(legend(),point(N),N,UnFill);


PS : pas le temps ce matin de lire ce qui a précédé ton dernier message : je le ferai plus tard.