Legend()

Pour toute demande d'aide sur des exemples non finalisés, c'est ici.
Les exemples aboutis et intéressants seront ajoutés aux sous-forums qui suivent.

Règles du forum
Pour toute demande d'aide pour la conception (ou la confirmation d'un code) d'une figure Asymptote, c'est ici.

J'invite ceux qui ont régulièrement des questions à poser à aller dans leur panneau de l'utilisateur pour indiquer dans la signature de leurs messages :

  1. Nom du système d'exploitation (W7 ou Ubuntu 12.04 ou ...)
  2. Version d'Asymptote et éditeur utilisé pour les figures Asymptote
  3. Distribution LaTeX et éditeur utilisé pour les tex.


On va gagner du temps dans les réponses !
maurice
Messages : 262
Enregistré le : jeu. 25 mars 2010, 13:00
Contact :

Legend()

Message non lu par maurice » mar. 27 nov. 2012, 04:25

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
Doc 3D
Si ça ne marche pas, essayez la version pdf

Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit

maurice
Messages : 262
Enregistré le : jeu. 25 mars 2010, 13:00
Contact :

Re: Legend()

Message non lu par maurice » mar. 27 nov. 2012, 04:58

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
Doc 3D
Si ça ne marche pas, essayez la version pdf

Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Re: Legend()

Message non lu par GM » mar. 27 nov. 2012, 07:20

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.
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

Répondre