Diagramme circulaire

Règles du forum
ATTENTION ! Il est demandé de ne déposer dans ce forum que des exemples en langage Asymptote
  • finalisés
  • que l'on pense intéressants et optimisés
  • et qui se rapportent au thème du forum.
Si certains exemples déposés donnent lieu à de nombreuses modifications, ils seront déplacés et remplacés par un nouveau sujet dans ce forum avec la ou les meilleures propositions.
Pour les demandes d'aide ... il y a un forum spécifique !
Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Diagramme circulaire

Message non lu par GM » lun. 22 mars 2010, 14:05

Il faudra probablement un jour penser à créer une extension dédiée aux diagrammes statistiques mais en attendant, voilà un exemple de diagramme circulaire.

Figure asymptote 93937788d91a7495f4cfc6ccc9edb906
*** 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.  
  2. size(250,0);
  3. // Tableau des modalités
  4. string[] tabmod={"Modalit\'e 1","Modalit\'e 2","Modalit\'e 3",
  5. "Modalit\'e 4","Modalit\'e 5"};
  6. // Tableau des effectifs (ou fréquences)
  7. real[] tabeff={20,6,7,10,11};
  8. // Tableau des décalages éventuels des secteurs
  9. real[] tabdecsec={0,.1,0,.2,0};
  10. // Tableau des décalages éventuels des labels
  11. real[] tabdeclab={0,.5,.5,.2,.2};
  12. // Les deux couleurs utilisées pour composer
  13. // les couleurs des secteurs
  14. pen color1=green,color2=blue;
  15. // Le stylo pour les labels
  16. pen p3=blue,p4=yellow+white;
  17. ///////////////////////////////////////////////////////////////
  18. /// Ce qui suit n'est a priori pas à changer et pourrait être
  19. /// ajouté un de ces jours à une extension perso stats_gm.asy
  20. /// pour être remplacé par :
  21. /// diacirculaire(tabmod,tabeff,tabdec,color1,color2);
  22. ///////////////////////////////////////////////////////////////
  23. real[] tabangle,tabanglecumule,tabanglelabel;
  24. tabanglecumule[0]=0;
  25. int n=tabeff.length;
  26. for(int i=0; i<n; ++i) {
  27. tabangle[i]=tabeff[i]*360/sum(tabeff);
  28. tabanglecumule[i+1]=tabanglecumule[i]+tabangle[i];
  29. tabanglelabel[i]=tabanglecumule[i]+tabangle[i]/2;
  30. path secteur=(0,0)--arc((0,0),1,tabanglecumule[i],tabanglecumule[i+1])--cycle;
  31. transform t1=shift(tabdecsec[i]*dir(tabanglelabel[i])),
  32. t2=shift((.5+tabdecsec[i]+tabdeclab[i])*dir(tabanglelabel[i]));
  33. filldraw(t1*secteur,i/n*color1+(1-i/n)*color2+white);
  34. label(tabmod[i],t2*(0,0),p3,Fill(p4));
  35. }
  36.  
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 !

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

Re: Diagramme circulaire

Message non lu par GM » lun. 22 mars 2010, 14:08

Le même script que précédemment avec de très petites modifications :

Figure asymptote 6fb88f4f84d88b1ffd839d90984075cb
*** 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.  
  2. size(250,0);
  3. // Tableau des modalités
  4. string[] tabmod={"Modalit\'e 1","Modalit\'e 2","Modalit\'e 3",
  5. "Modalit\'e 4","Modalit\'e 5"};
  6. // Tableau des effectifs (ou fréquences)
  7. real[] tabeff={20,6,7,10,11};
  8. // Tableau des décalages éventuels des secteurs
  9. real[] tabdecsec={0,0,.1,.5,0};
  10. // Tableau des décalages éventuels des labels
  11. real[] tabdeclab={0,.5,.5,.2,.5};
  12. // Les deux couleurs utilisées pour composer
  13. // les couleurs des secteurs
  14. pen color1=green,color2=red;
  15. // Le stylo pour les labels
  16. pen p3=blue,p4=yellow+white;
  17. ///////////////////////////////////////////////////////////////
  18. /// Ce qui suit n'est a priori pas à changer et pourrait être
  19. /// ajouté un de ces jours à une extension perso stats_gm.asy
  20. /// pour être remplacé par :
  21. /// diacirculaire(tabmod,tabeff,tabdec,color1,color2);
  22. ///////////////////////////////////////////////////////////////
  23. real[] tabangle,tabanglecumule,tabanglelabel;
  24. tabanglecumule[0]=0;
  25. int n=tabeff.length;
  26. for(int i=0; i<n; ++i) {
  27. tabangle[i]=tabeff[i]*360/sum(tabeff);
  28. tabanglecumule[i+1]=tabanglecumule[i]+tabangle[i];
  29. tabanglelabel[i]=tabanglecumule[i]+tabangle[i]/2;
  30. path secteur=(0,0)--arc((0,0),1,tabanglecumule[i],tabanglecumule[i+1])--cycle;
  31. transform t1=shift(tabdecsec[i]*dir(tabanglelabel[i])),
  32. t2=shift((.5+tabdecsec[i]+tabdeclab[i])*dir(tabanglelabel[i]));
  33. filldraw(t1*secteur,i/n*color1+(1-i/n)*color2+white);
  34. label(tabmod[i],t2*(0,0),p3,Fill(p4));
  35. }
  36.  
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 !

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

Re: Diagramme circulaire

Message non lu par GM » lun. 22 mars 2010, 14:14

Et encore des variantes :

Figure asymptote 1616a1d07cbafc00c01dea93c5e91bf7
*** 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.  
  2. size(250,0);
  3. // Tableau des modalités
  4. string[] tabmod={"Modalit\'e 1","Modalit\'e 2","Modalit\'e 3",
  5. "Modalit\'e 4","Modalit\'e 5"};
  6. // Tableau des effectifs (ou fréquences)
  7. real[] tabeff={18,6,7,10,25};
  8. // Tableau des décalages éventuels des secteurs
  9. real[] tabdecsec={0,0,0,0,.4};
  10. // Tableau des décalages éventuels des labels
  11. real[] tabdeclab={0,.5,.5,.2,.5};
  12. // Les deux couleurs utilisées pour composer
  13. // les couleurs des secteurs
  14. pen color1=blue,color2=orange;
  15. // Le stylo pour les labels
  16. pen p3=red,p4=white;
  17. ///////////////////////////////////////////////////////////////
  18. /// Ce qui suit n'est a priori pas à changer et pourrait être
  19. /// ajouté un de ces jours à une extension perso stats_gm.asy
  20. /// pour être remplacé par :
  21. /// diacirculaire(tabmod,tabeff,tabdec,color1,color2);
  22. ///////////////////////////////////////////////////////////////
  23. real[] tabangle,tabanglecumule,tabanglelabel;
  24. tabanglecumule[0]=0;
  25. int n=tabeff.length;
  26. for(int i=0; i<n; ++i) {
  27. tabangle[i]=tabeff[i]*360/sum(tabeff);
  28. tabanglecumule[i+1]=tabanglecumule[i]+tabangle[i];
  29. tabanglelabel[i]=tabanglecumule[i]+tabangle[i]/2;
  30. path secteur=(0,0)--arc((0,0),1,tabanglecumule[i],tabanglecumule[i+1])--cycle;
  31. transform t1=shift(tabdecsec[i]*dir(tabanglelabel[i])),
  32. t2=shift((.5+tabdecsec[i]+tabdeclab[i])*dir(tabanglelabel[i]));
  33. filldraw(t1*secteur,i/n*color1+(1-i/n)*color2+white);
  34. label(tabmod[i],t2*(0,0),p3,Fill(p4));
  35. }
  36.  
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 !

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

Re: Diagramme circulaire

Message non lu par GM » lun. 8 oct. 2012, 14:18

Suite à une demande sur mathematex, une version 3D qui ne tient pas compte de ce qui précède (puisque je suis reparti d'une feuille blanche).

Image


Il suffit de cela :

Code : Tout sélectionner

import mesmacrosdestats;

size(10cm);
currentlight=White;
currentprojection=orthographic(5,5,5);

real  donnees[]={  1,   2,    3,   4,     2};
pen   couleur[]={red,blue,green,pink,yellow};
real decalage[]={ .4,   0,  .25,   0,     0};

camembert3D(donnees,couleur,decalage);


... si dans mesmacrosdestats.asy, on peut y trouver cela :

Code : Tout sélectionner

import three;

void camembert3D(real[] val, real r=5, real h=1, pen[] c, real[] d){
    real total=sum(val),cumul=0;
    for(int k=0; k<val.length; ++k){
        path p=(0,0)--arc((0,0),r,cumul/total*360,(cumul+val[k])/total*360)--cycle;
        p=shift(d[k]*r*dir((cumul+.5val[k])/total*360))*p;
        draw(surface(path3(p)),c[k]);
        draw(shift(0,0,h)*surface(path3(p)),c[k]);
        draw(extrude(path3(p),h*Z),c[k]);
        cumul+=val[k];
    }
}
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