summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/profcollege/latex/PfCStatistiquesoldold.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCStatistiquesoldold.tex')
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCStatistiquesoldold.tex2109
1 files changed, 0 insertions, 2109 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCStatistiquesoldold.tex b/macros/latex/contrib/profcollege/latex/PfCStatistiquesoldold.tex
deleted file mode 100644
index 72a33f9dd4..0000000000
--- a/macros/latex/contrib/profcollege/latex/PfCStatistiquesoldold.tex
+++ /dev/null
@@ -1,2109 +0,0 @@
-%%%
-% Statistiques
-%%%
-\newcommand\NbDonnees{}%
-\newcommand\SommeDonnees{}%
-\newcommand\EffectifTotal{}%
-\newcommand\Moyenne{}%
-\newcommand\Etendue{}%
-\newcommand\Mediane{}%
-\newcommand\DonneeMax{}%
-\newcommand\DonneeMin{}%
-\newcommand\EffectifMax{}%
-\newcommand\PfCArticleMediane{la}%
-
-\setKVdefault[ClesStat]{ColVide=0,CaseVide=false,EffVide=false,%
-FreqVide=false,AngVide=false,ECCVide=false,TotalVide=false,Sondage=false,Liste=false,%
-Tableau=false,Stretch=1,Frequence=false,EffectifTotal=false,%
-Etendue=false,Moyenne=false,SET=false,ValeurExacte=false,Mediane=false,DetailsMediane=false,UneMediane=false,QuartileUn=false,QuartileTrois=false,Total=false,Concret=false,%
-Unite={},Largeur=1cm,Precision=2,PrecisionF=0,Donnee=Valeurs,Effectif=Effectif,Grille=false,Origine=0,Angle=false,SemiAngle=false,Qualitatif=false,Classes=false,TableauVide=false,ECC=false,Coupure=10,CouleurTab=gray!15,Graphique=false,Batons=true,%
-% Pour les diags batons
-EpaisseurBatons=1,ListeCouleursB={a},Lecture=false,LectureFine=false,AideLecture=false,Reponses=false,DonneesSup=false,AbscisseRotation=false,Tiret=false,AngleRotationAbscisse=0,Pasx=1,Pasy=1,Unitex=0.5,Unitey=0.5,Depart=0,CouleurDefaut=black,Date=false,GrandNombrey=false,GrandNombrex=false,%
-% Pour les diags circulaires
-Rayon=3cm,AffichageAngle=false,AffichageDonnee=false,ListeCouleurs={white},Hachures=false,LectureInverse=false,EcartHachures=0.25,EpaisseurHachures=1,Legende,LegendeVide=false,ACompleter=false,%
-%Pour les représentations
-Representation=false,%
-%Pour les barres horizontales
-Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0,%Grille est dispo
-% Pour les histogrammes
-Histogramme=false,UniteAire=1,MemeAmpli,DepartHisto=1%
-}%
-%compl\'ements
-\defKV[ClesStat]{AngleRotationAbscisse=\setKV[ClesStat]{AbscisseRotation}}%
-\defKV[ClesStat]{AffichageDonnees=\setKV[ClesStat]{AffichageAngle=false}\setKV[ClesStat]{AffichageDonnee}}%
-\defKV[ClesStat]{CasesVides=\setKV[ClesStat]{CaseVide}}%
-\defKV[ClesStat]{LegendesVides=\setKV[ClesStat]{LegendeVide}}%
-\defKV[ClesStat]{GrandNombreO=\setKV[ClesStat]{GrandNombrey}}%
-\defKV[ClesStat]{GrandNombreA=\setKV[ClesStat]{GrandNombrex}}%
-% La construction du tableau
-\def\addtotok#1#2{#1\expandafter{\the#1#2}}%
-\newtoks\tabtoksa\newtoks\tabtoksb\newtoks\tabtoksc%
-\def\updatetoks#1/#2\nil{\addtotok\tabtoksa{\ifboolKV[ClesStat]{Qualitatif}{&#1}{&\num{#1}}}\addtotok\tabtoksb{&\num{#2}}}%
-%
-\newcounter{PfCCompteLignes}%
-%
-\def\BuildtabStat{% %%Tableau sans/avec total
- \setcounter{PfCCompteLignes}{0}%
- \tabtoksa{\useKV[ClesStat]{Donnee}}\tabtoksb{\useKV[ClesStat]{Effectif}}%
- \foreachitem\compteur\in\ListeComplete{\expandafter\updatetoks\compteur\nil}%
- \renewcommand{\arraystretch}{\useKV[ClesStat]{Stretch}}%
- \ifboolKV[ClesStat]{Total}{%
- \begin{NiceTabular}{c*{\fpeval{\ListeCompletelen+1}}{>{\centering\arraybackslash}p{\useKV[ClesStat]{Largeur}}}}%
- \CodeBefore%
- \rowcolor{\useKV[ClesStat]{CouleurTab}}{1}%
- \columncolor{\useKV[ClesStat]{CouleurTab}}{1}%
- \Body%
- \the\tabtoksa&Total\\%
- \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&}}{\the\tabtoksb&\num{\EffectifTotal}}\\%
- \ifboolKV[ClesStat]{Frequence}{\stepcounter{PfCCompteLignes}Fr\'equence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\num{\CalculFrequence{##1}}}}}&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{100}}\\}{}%
- \ifboolKV[ClesStat]{Angle}{\stepcounter{PfCCompteLignes}Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{360}}\\}{}%
- \ifboolKV[ClesStat]{SemiAngle}{\stepcounter{PfCCompteLignes}Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{180}}\\}{}%
- \ifboolKV[ClesStat]{ECC}{\stepcounter{PfCCompteLignes}E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\num{\EffectifTotal}}}\\}{}%
- \CodeAfter%
- % On crée la liste des colonnes à vider
- \xintifboolexpr{\useKV[ClesStat]{ColVide}>0}{%
- \xdef\FooStat{\useKV[ClesStat]{ColVide}}%
- \setsepchar{,}%
- \readlist*\ListeColonnesAVider{\FooStat}%
- \foreachitem\compteur\in\ListeColonnesAVider{%
- \tikz\fill[white] (row-2-|col-\fpeval{\compteur+1}) rectangle (last-|col-\fpeval{\compteur+2});%
- }%
- }{}%
- % On crée la liste des cases à vider
- \ifboolKV[ClesStat]{CaseVide}{%
- \xdef\FooStatCases{\useKV[ClesStat]{CasesVides}}%
- \setsepchar[*]{,*/}%
- \readlist*\ListeCasesAVider{\FooStatCases}%
- \foreachitem\compteur\in\ListeCasesAVider{%
- \tikz\fill[white] (row-\fpeval{\ListeCasesAVider[\compteurcnt,1]+1}-|col-\fpeval{\ListeCasesAVider[\compteurcnt,2]+1}) rectangle (row-\fpeval{\ListeCasesAVider[\compteurcnt,1]+2}-|col-\fpeval{\ListeCasesAVider[\compteurcnt,2]+2});%
- }%
- }{}%
- % On retrace le tableau
- %Les colonnes
- \xintFor* ##1 in {\xintSeq{1}{\fpeval{\ListeCompletelen+3}}}\do{%
- \tikz\draw (row-1-|col-##1) -- (last-|col-##1);%
- }%
- % Les lignes
- \xintFor* ##1 in {\xintSeq{1}{\fpeval{\thePfCCompteLignes+3}}}\do{%
- \tikz\draw (row-##1-|col-1) -- (row-##1-|last);%
- }%
- \end{NiceTabular}%
- }{%
- \begin{NiceTabular}{c*{\fpeval{\ListeCompletelen}}{>{\centering\arraybackslash}p{\useKV[ClesStat]{Largeur}}}}%
- \CodeBefore%
- \rowcolor{\useKV[ClesStat]{CouleurTab}}{1}%
- \columncolor{\useKV[ClesStat]{CouleurTab}}{1}%
- \Body%
- \the\tabtoksa\\%
- \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&}}{\the\tabtoksb}\\%
- \ifboolKV[ClesStat]{Frequence}{\stepcounter{PfCCompteLignes}Fr\'equence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\num{\CalculFrequence{##1}}}}}\\}{}%
- \ifboolKV[ClesStat]{Angle}{\stepcounter{PfCCompteLignes}Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}\\}{}%
- \ifboolKV[ClesStat]{SemiAngle}{\stepcounter{PfCCompteLignes}Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}\\}{}%
- \ifboolKV[ClesStat]{ECC}{\stepcounter{PfCCompteLignes}E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}\\}{}%
- \CodeAfter%
- % On crée la liste des colonnes à vider
- \xintifboolexpr{\useKV[ClesStat]{ColVide}>0}{%
- \xdef\FooStat{\useKV[ClesStat]{ColVide}}%
- \setsepchar{,}%
- \readlist*\ListeColonnesAVider{\FooStat}%
- \foreachitem\compteur\in\ListeColonnesAVider{%
- \tikz\fill[white] (row-2-|col-\fpeval{\compteur+1}) rectangle (last-|col-\fpeval{\compteur+2});%
- }%
- }{}%
- % On crée la liste des cases à vider
- \ifboolKV[ClesStat]{CaseVide}{%
- \xdef\FooStatCases{\useKV[ClesStat]{CasesVides}}%
- \setsepchar[*]{,*/}%
- \readlist*\ListeCasesAVider{\FooStatCases}%
- \foreachitem\compteur\in\ListeCasesAVider{%
- \tikz\fill[white] (row-\fpeval{\ListeCasesAVider[\compteurcnt,1]+1}-|col-\fpeval{\ListeCasesAVider[\compteurcnt,2]+1}) rectangle (row-\fpeval{\ListeCasesAVider[\compteurcnt,1]+2}-|col-\fpeval{\ListeCasesAVider[\compteurcnt,2]+2});%
- }%
- }{}%
- % On retrace le tableau
- %Les colonnes
- \xintFor* ##1 in {\xintSeq{1}{\fpeval{\ListeCompletelen+2}}}\do{%
- \tikz\draw (row-1-|col-##1) -- (last-|col-##1);%
- }%
- % Les lignes
- \xintFor* ##1 in {\xintSeq{1}{\fpeval{\thePfCCompteLignes+3}}}\do{%
- \tikz\draw (row-##1-|col-1) -- (row-##1-|last);%
- }%
- \end{NiceTabular}%
- }%
-}%
-
-% Pour construire le diagramme en barres horizontales
-\def\UpdatetoksHor#1/#2/#3\nil{\addtotok\toklistenomhor{"#1",}\addtotok\toklistedonhor{#3,}\addtotok\toklisteaffhor{"#2",}}%
-
-\newcommand\buildgraphbarhor{%
- \newtoks\toklistenomhor%
- \newtoks\toklistedonhor%
- \newtoks\toklisteaffhor%
- \newtoks\toklistecouleur%
- \xdef\PfCfooStat{}%
- \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
- \xdef\PfCfooStat{\PfCfooStat \ListeComplete[##1,2],}%
- }%
- \xdef\DivMax{\fpeval{max(\PfCfooStat)}}%
- \xdef\ExposantDivMax{\fpeval{round(ln(\DivMax)/ln(10))}}%
- \xdef\DivMax{\fpeval{10**\ExposantDivMax}}%
- \xdef\PfCfooStat{}%
- \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
- \xdef\PfCfooStat{\PfCfooStat \ListeComplete[##1,1]/\ListeComplete[##1,2]/\fpeval{\ListeComplete[##1,2]/\DivMax},}%
- }%
- \readlist*\ListeCompleteDiagHor{\PfCfooStat}%
- \foreachitem\compteur\in\ListeCompleteDiagHor{\expandafter\UpdatetoksHor\compteur\nil}%
- \xdef\ListeAvantCouleurs{\useKV[ClesStat]{ListeCouleurs}}%
- \readlist*\ListeCouleur{\ListeAvantCouleurs}%
- \foreachitem\couleur\in\ListeCouleur{\expandafter\UpdateCoul\couleur\nil}%
- \NewMPDiagBarreHor{\the\toklistenomhor}{\the\toklistedonhor}{\the\toklisteaffhor}{\the\toklistecouleur}%
-}%
-
-% Pour construire le diagramme en bâtons
-\def\Updatetoks#1/#2\nil{\addtotok\toklistepoint{(#1,#2),}}%
-\newcommand\buildgraph[1][]{%
- \newtoks\toklistepoint\toklistepoint{}%
- \newtoks\toklistecouleur\toklistecouleur{}%
- \newtoks\toklistelegende\toklistelegende{}%
- \ifboolKV[ClesStat]{LegendeVide}{%
- \xdef\foo{\useKV[ClesStat]{LegendesVides}}%
- \readlist*\ListeLegendesAEffacer{\foo}%
- }{\xdef\foo{-1}\readlist*\ListeLegendesAEffacer{\foo}%
- }%
- \foreachitem\compteur\in\ListeLegendesAEffacer{\expandafter\UpdateLegende\compteur\nil}%
- \foreachitem\compteur\in\ListeComplete{\expandafter\Updatetoks\compteur\nil}%
- \xdef\ListeAvantCouleurs{\useKV[ClesStat]{ListeCouleursB}}%
- \readlist*\ListeCouleur{\ListeAvantCouleurs}%
- \foreachitem\couleur\in\ListeCouleur{\expandafter\UpdateCoul\couleur\nil}%
- \MPStatNew{\the\toklistepoint}{\the\toklistecouleur}{\the\toklistelegende}
-}%
-
-% Pour construire le diagramme en bâtons qualitatif
-\def\Updatetoksq#1/#2\nil{\addtotok\toklistepointq{"#1",#2,}}%
-\newcommand\buildgraphq[1][]{%
- \newtoks\toklistepointq\toklistepointq{}%
- \newtoks\toklistecouleur\toklistecouleur{}%
- \newtoks\toklistelegende\toklistelegende{}%
- \ifboolKV[ClesStat]{LegendeVide}{%
- \xdef\foo{\useKV[ClesStat]{LegendesVides}}%
- \readlist*\ListeLegendesAEffacer{\foo}%
- }{\xdef\foo{-1}\readlist*\ListeLegendesAEffacer{\foo}%
- }%
- \foreachitem\compteur\in\ListeLegendesAEffacer{\expandafter\UpdateLegende\compteur\nil}%
- \foreachitem\compteur\in\ListeComplete{\expandafter\Updatetoksq\compteur\nil}%
- \xdef\ListeAvantCouleurs{\useKV[ClesStat]{ListeCouleursB}}%
- \readlist*\ListeCouleur{\ListeAvantCouleurs}%
- \foreachitem\couleur\in\ListeCouleur{\expandafter\UpdateCoul\couleur\nil}%
- \MPStatNew{\the\toklistepointq}{\the\toklistecouleur}{\the\toklistelegende}%
-}%
-
-\def\UpdateCoul#1\nil{\addtotok\toklistecouleur{#1,}}%
-\def\UpdateLegende#1\nil{\addtotok\toklistelegende{#1,}}%
-
-% Pour construire le diagramme circulaire qualitatif
-\def\buildgraphcq#1{%
- \newtoks\toklistepointq\toklistepointq{}%
- \newtoks\toklistecouleur\toklistecouleur{}%
- \newtoks\toklistelegende\toklistelegende{}%
- \ifboolKV[ClesStat]{LegendeVide}{%
- \xdef\foo{\useKV[ClesStat]{LegendesVides}}%
- \readlist*\ListeLegendesAEffacer{\foo}%
- }{\xdef\foo{0}\readlist*\ListeLegendesAEffacer{\foo}%
- }%
- \foreachitem\compteur\in\ListeLegendesAEffacer{\expandafter\UpdateLegende\compteur\nil}%
- %
- \foreachitem\compteur\in\ListeComplete{\expandafter\Updatetoksq\compteur\nil}%
- \xdef\ListeAvantCouleurs{\useKV[ClesStat]{ListeCouleurs}}%
- \readlist*\ListeCouleur{\ListeAvantCouleurs}%
- \foreachitem\couleur\in\ListeCouleur{\expandafter\UpdateCoul\couleur\nil}%
- \NewMPStatCirculaireQ{\the\toklistepointq}{#1}{\the\toklistecouleur}{\the\toklistelegende}%
-}%
-
-%% calcul des fr\'equences
-\newcommand\CalculFrequence[1]{%
- \fpeval{round(\ListeComplete[#1,2]*100/\EffectifTotal,\useKV[ClesStat]{PrecisionF})}
-}
-
-%% calcul des angles
-\newcommand\CalculAngle[1]{%
- \fpeval{round(\ListeComplete[#1,2]*360/\EffectifTotal,0)}
-}
-\newcommand\CalculSemiAngle[1]{%
- \fpeval{round(\ListeComplete[#1,2]*180/\EffectifTotal,0)}
-}
-
-%% calcul des ECC
-\newcount\CompteurECC%
-\newcount\CompteurECCTotal%
-\newcount\CompteurECCC%
-\newcount\CompteurECCCTotal%
-
-\newcommand\CalculECC[1]{%
- \xdef\TotalECC{0}%
- \CompteurECC=1%
- \CompteurECCTotal=\numexpr#1+1%
- \whiledo{\CompteurECC < \CompteurECCTotal}{%
- \xdef\TotalECC{\fpeval{\TotalECC+\ListeComplete[\the\CompteurECC,2]}}%
- \CompteurECC=\numexpr\CompteurECC+1%
- }%
- \num{\TotalECC}%
-}
-
-\def\NewMPDiagBarreHorCode{%
- Longueur:=\useKV[ClesStat]{Longueur};
- Hauteur:=\useKV[ClesStat]{Hauteur};
- Ecart:=\useKV[ClesStat]{EcartBarre};
- ExposantDivMax:=\ExposantDivMax;
- ecarthachures=\useKV[ClesStat]{EcartHachures};
- epaisseurhachures=\useKV[ClesStat]{EpaisseurHachures};
- boolean Hachures,Bicolore,Grille,AffichageDonnee,LegendeVide;
- Hachures=\useKV[ClesStat]{Hachures};
- Bicolore=\useKV[ClesStat]{Bicolore};
- Grille=\useKV[ClesStat]{Grille};
- AffichageDonnee=\useKV[ClesStat]{AffichageDonnee};
- LegendeVide=\useKV[ClesStat]{LegendeVide};
- vardef CalculNombreDonneesEtDonneeMax(text t)=
- nbdon:=0;%nombre de données
- DonneeMax:=0;%donnée DonneeMaximale
- for p_=t:
- nbdon:=nbdon+1;
- if p_>DonneeMax:
- DonneeMax:=p_;
- fi;
- endfor;
- enddef;
- vardef ListeDonnees(text t)=
- n:=0;
- for p_=t:
- n:=n+1;
- Donnees[n]:=p_;
- endfor;
- enddef;
- vardef RecuperationCouleurs(text t)=
- color Col[];
- n:=0;
- for p_=t:
- n:=n+1;
- Col[n]=p_;
- endfor;
- enddef;
-}
-
-% Construction d'un diagramme en barres horizontal
-\newcommand\NewMPDiagBarreHor[4]{%
- % #1 Liste des noms
- % #2 Liste des valeurs associées
- % #3 Liste des valeurs à afficher (si pb calcul MP)
- % #4 Liste des couleurs
- \ifluatex%
- \mplibforcehmode%
- \begin{mplibcode}%
- \NewMPDiagBarreHorCode%
- vardef TraceDiag=
- if Grille:
- pair Zz[];%Pour déterminer "le dernier point"
- Zz0=(0,-(nbdon-1)*(Hauteur+Ecart)-Ecart);
- Zz2=(0,(Hauteur+Ecart));
- Zz1=((1/DonneeMax)*Longueur,-(nbdon-1)*(Hauteur+Ecart)-Ecart);
- Zz3=if ExposantDivMax=0 : (DonneeMax+1)[Zz0,Zz1] else: ((floor(DonneeMax*10+2))/10)[Zz0,Zz1];fi;
- if ExposantDivMax=0:
- for k=1 upto DonneeMax+1:
- trace (Zz0--Zz2) shifted (k*(Zz1-Zz0)) dashed evenly withcolor 0.5white;
- endfor;
- else:
- for k=1 upto (floor(DonneeMax*10+2)):
- trace (Zz0--Zz2) shifted ((k/10)*(Zz1-Zz0)) dashed evenly withcolor 0.5white;
- endfor;
- fi;
- if ExposantDivMax=0:
- for k=1 upto (DonneeMax+1):
- label.bot(TEX("\num{"&decimal(k)&"}"),Zz0+k*(Zz1-Zz0));
- endfor;
- else:
- if ExposantDivMax<5:
- for k=1 upto (floor(DonneeMax*10+2)):
- label.bot(TEX("\num{\fpeval{"&decimal(k)&"*(10**"&decimal(ExposantDivMax-1)&")}}"),Zz0+(k/10)*(Zz1-Zz0));
- endfor;
- else:
- dotlabel.bot(TEX("\num{\fpeval{10**"&decimal(ExposantDivMax)&"}}"),Zz1);
- fi;
- fi;
- fi;
- for k=0 upto nbdon-1:
- path RectangleDonnee;
- RectangleDonnee=(unitsquare xscaled ((Donnees[k+1]/DonneeMax)*Longueur) yscaled Hauteur) shifted(0,-k*(Hauteur+Ecart));
- if Hachures:
- fill RectangleDonnee withcolor white;
- trace Hachurage(RectangleDonnee,60 if
- (k mod 2)=0: +90 fi,ecarthachures,if (k mod 2)=0 : 0 else: 1 fi)
- withpen pencircle scaled epaisseurhachures;
- else:
- remplis RectangleDonnee withcolor if unknown Col[k+1]: if Bicolore:Col[(k mod 2)+1] else: white fi; else:if Bicolore:Col[(k mod 2)+1] else: Col[k+1] fi; fi;
- fi;
- trace RectangleDonnee;
- endfor;
- if Grille:
- drawarrow (0,-(nbdon-1)*(Hauteur+Ecart)-Ecart)--(0,(Hauteur+Ecart)) withpen pencircle scaled 1.5;
- drawarrow (0,-(nbdon-1)*(Hauteur+Ecart)-Ecart)--(Zz3+u*(0.25,0)) withpen pencircle scaled 1.5;
- fi;
- enddef;
- vardef AffichageNom(text t)=
- k:=0;
- for p_=t:
- label.lft(TEX(p_),0.5[(0,0),(0,Hauteur)] shifted (0,-k*(Hauteur+Ecart)));
- k:=k+1;
- endfor;
- enddef;
- vardef AffichageDonnees(text t)=
- k:=0;
- for p_=t:
- label.rt(TEX("\num{"&p_&"}"),0.5[(0,0),(0,Hauteur)] shifted (((Donnees[k+1]/DonneeMax)*Longueur),-k*(Hauteur+Ecart)));
- k:=k+1;
- endfor;
- enddef;
- CalculNombreDonneesEtDonneeMax(#2);
- ListeDonnees(#2);
- RecuperationCouleurs(#4);
- TraceDiag;
- if LegendeVide=false:
- AffichageNom(#1);
- fi;
- if AffichageDonnee:
- AffichageDonnees(#3);
- fi;
- \end{mplibcode}
- \else%
- \begin{mpost}[mpsettings={\NewMPDiagBarreHorCode}]
- vardef TraceDiag=
- if Grille:
- pair Zz[];%Pour déterminer "le dernier point"
- Zz0=(0,-(nbdon-1)*(Hauteur+Ecart)-Ecart);
- Zz2=(0,(Hauteur+Ecart));
- Zz1=((1/DonneeMax)*Longueur,-(nbdon-1)*(Hauteur+Ecart)-Ecart);
- Zz3=if ExposantDivMax=0 : (DonneeMax+1)[Zz0,Zz1] else: ((floor(DonneeMax*10+2))/10)[Zz0,Zz1];fi;
- if ExposantDivMax=0:
- for k=1 upto DonneeMax+1:
- trace (Zz0--Zz2) shifted (k*(Zz1-Zz0)) dashed evenly withcolor 0.5white;
- endfor;
- else:
- for k=1 upto (floor(DonneeMax*10+2)):
- trace (Zz0--Zz2) shifted ((k/10)*(Zz1-Zz0)) dashed evenly withcolor 0.5white;
- endfor;
- fi;
- if ExposantDivMax=0:
- for k=1 upto (DonneeMax+1):
- label.bot(LATEX("\num{"&decimal(k)&"}"),Zz0+k*(Zz1-Zz0));
- endfor;
- else:
- if ExposantDivMax<5:
- for k=1 upto (floor(DonneeMax*10+2)):
- label.bot(LATEX("\num{\noexpand\fpeval{"&decimal(k)&"*(10**"&decimal(ExposantDivMax-1)&")}}"),Zz0+(k/10)*(Zz1-Zz0));
- endfor;
- else:
- dotlabel.bot(LATEX("\num{\noexpand\fpeval{10**"&decimal(ExposantDivMax)&"}}"),Zz1);
- fi;
- fi;
- fi;
- for k=0 upto nbdon-1:
- path RectangleDonnee;
- RectangleDonnee=(unitsquare xscaled ((Donnees[k+1]/DonneeMax)*Longueur) yscaled Hauteur) shifted(0,-k*(Hauteur+Ecart));
- if Hachures:
- fill RectangleDonnee withcolor white;
- trace Hachurage(RectangleDonnee,60 if
- (k mod 2)=0: +90 fi,ecarthachures,if (k mod 2)=0 : 0 else: 1 fi)
- withpen pencircle scaled epaisseurhachures;
- else:
- remplis RectangleDonnee withcolor if unknown Col[k+1]: if Bicolore:Col[(k mod 2)+1] else: white fi; else:if Bicolore:Col[(k mod 2)+1] else: Col[k+1] fi; fi;
- fi;
- trace RectangleDonnee;
- endfor;
- if Grille:
- drawarrow (0,-(nbdon-1)*(Hauteur+Ecart)-Ecart)--(0,(Hauteur+Ecart)) withpen pencircle scaled 1.5;
- drawarrow (0,-(nbdon-1)*(Hauteur+Ecart)-Ecart)--(Zz3+u*(0.25,0)) withpen pencircle scaled 1.5;
- fi;
- enddef;
- vardef AffichageNom(text t)=
- k:=0;
- for p_=t:
- label.lft(LATEX(p_),0.5[(0,0),(0,Hauteur)] shifted (0,-k*(Hauteur+Ecart)));
- k:=k+1;
- endfor;
- enddef;
- vardef AffichageDonnees(text t)=
- k:=0;
- for p_=t:
- label.rt(LATEX("\num{"&p_&"}"),0.5[(0,0),(0,Hauteur)] shifted (((Donnees[k+1]/DonneeMax)*Longueur),-k*(Hauteur+Ecart)));
- k:=k+1;
- endfor;
- enddef;
- CalculNombreDonneesEtDonneeMax(#2);
- ListeDonnees(#2);
- RecuperationCouleurs(#4);
- TraceDiag;
- if LegendeVide=false:
- AffichageNom(#1);
- fi;
- if AffichageDonnee:
- AffichageDonnees(#3);
- fi;
- \end{mpost}
- \fi%
-}%
-
-\def\MPStatNewCode{%
- maxx:=0;
- maxy:=0;
- unitex:=\useKV[ClesStat]{Unitex}*cm;
- unitey:=\useKV[ClesStat]{Unitey}*cm;
- xpartorigine:=\useKV[ClesStat]{Origine};
- AngleRotation=\useKV[ClesStat]{AngleRotationAbscisse};
- boolean Rotation,Lecture,LectureFine,AideLecture,DonneesSup,Reponses,Qualitatif,Tiret,LegendeVide,Retour,GrandNombrex,GrandNombrey,Date;
- GrandNombrex=\useKV[ClesStat]{GrandNombrex};
- GrandNombrey=\useKV[ClesStat]{GrandNombrey};
- if GrandNombrex:
- GrandNombreA=\useKV[ClesStat]{GrandNombreA};
- fi;
- if GrandNombrey:
- GrandNombreO=\useKV[ClesStat]{GrandNombreO};
- fi;
- Date:=\useKV[ClesStat]{Date};
- Rotation=\useKV[ClesStat]{AbscisseRotation};
- Lecture:=\useKV[ClesStat]{Lecture};
- LectureFine:=\useKV[ClesStat]{LectureFine};
- AideLecture:=\useKV[ClesStat]{AideLecture};
- DonneesSup:=\useKV[ClesStat]{DonneesSup};
- Reponses:=\useKV[ClesStat]{Reponses};
- LegendeVide=\useKV[ClesStat]{LegendeVide};
- epaisseurbatons=\useKV[ClesStat]{EpaisseurBatons};
- Qualitatif=\useKV[ClesStat]{Qualitatif};
- Tiret=\useKV[ClesStat]{Tiret};
- Retour=false;
- color CoulDefaut;
- CoulDefaut=\useKV[ClesStat]{CouleurDefaut};
- Depart=\useKV[ClesStat]{Depart};
- %
- pair A[],B[],P[];
- vardef toto(text t)=%points quantitatif
- n:=0;
- for p_=t:
- if pair p_:
- n:=n+1;
- P[n]=((xpart(p_)-(xpartorigine))*unitex,ypart(p_)*unitey);
- if xpart(p_)>maxx:
- maxx:=xpart(p_)-(xpartorigine);
- fi;
- if ypart(p_)>maxy:
- maxy:=ypart(p_);
- fi;
- A[n]=unitex*(xpart(p_)-(xpartorigine),0);
- B[n]=unitey*(0,ypart(p_));
- fi;
- endfor;
- enddef;
- vardef tutu(text t)=%points qualitatif
- n:=0;
- for p_=t:
- if numeric p_:
- P[n]=((n)*unitex,unitey*(p_-Depart));
- B[n]=(0,unitey*(p_-Depart));
- if p_>maxy:
- maxy:=p_;
- fi;
- else:
- n:=n+1;
- A[n]=unitex*(n,0);
- fi;
- endfor;
- maxy:=maxy-Depart;
- maxx:=n;
- enddef;
-}
-
-% Construction du graphique en bâtons
-\newcommand\MPStatNew[3]{%
- \ifluatex
- \mplibforcehmode
- \begin{mplibcode}
- \MPStatNewCode
- %
- vardef Test(expr nb)=
- Retour:=false;
- op:=0;
- for l_=#3:
- if l_=nb:
- op:=op+1;
- fi;
- endfor;
- if op>0:
- Retour:=true;
- fi;
- enddef;
- %
- % on r\'ecup\`ere les couleurs
- color Col[];
- n:=0;
- for p_=#2:
- n:=n+1;
- if color p_:
- Col[n]=p_;
- else:
- Col[n]=CoulDefaut;
- fi;
- endfor;
- vardef tata(text t)=%affichage quantitatif
- l=0;
- for p_=t:
- if pair p_:
- l:=l+1;
- if Rotation:
- if Date:
- label.bot(TEX(decimal(xpart(p_))) rotated AngleRotation,A[l]);
- else:
- label.bot(TEX("\num{"&decimal(xpart(p_))&"}") rotated AngleRotation,A[l]);
- fi;
- else :
- if Date:
- label.bot(TEX(decimal(xpart(p_))),A[l]);
- else:
- label.bot(TEX("\num{"&decimal(xpart(p_))&"}"),A[l]);
- fi;
- fi;
- if Reponses:
- if DonneesSup:
- Test(l);
- if Retour=false:
- if GrandNombrey:
- label.top(TEX("\num{"&decimal(ypart(p_))&"}"),P[l]);
- else:
- label.top(TEX("\num{"&decimal(ypart(p_))&"}"),P[l]);
- fi;
- fi;
- else:
- if Tiret:
- trace (B[l]+(-1pt,0))--(B[l]+(1pt,0));
- label.lft(TEX("\num{"&decimal(p_)&"}"),B[l]);
- else:
- dotlabel.lft(TEX("\num{"&decimal(ypart(p_))&"}"),B[l]);
- fi;
- fi;
- fi;
- fi;
- endfor;
- enddef;
- vardef titi(text t)=%affichage qualitatif
- l:=0;
- for p_=t:
- if numeric p_:
- if Reponses:
- if DonneesSup:
- Test(l);
- if Retour=false:
- label.top(TEX("\num{"&decimal(p_)&"}"),P[l]);
- fi;
- else:
- if Tiret:
- trace (B[l]+(-1pt,0))--(B[l]+(1pt,0));
- label.lft(TEX("\num{"&decimal(p_)&"}"),B[l]);
- else:
- dotlabel.lft(TEX("\num{"&decimal(p_)&"}"),B[l]);
- fi;
- fi;
- fi;
- else:
- l:=l+1;
- if Rotation:
- if AngleRotation<>0:
- picture TEXTELABEL;
- TEXTELABEL=image(
- labeloffset:=labeloffset*2;
- label.lft(TEX(p_),A[l]);
- labeloffset:=labeloffset/2;
- );
- trace rotation(TEXTELABEL,A[l],AngleRotation);
- else :
- label.bot(TEX(p_),A[l]);
- fi;
- fi;
- fi;
- endfor;
- enddef;
- if Qualitatif: tutu(#1); else: toto(#1); fi;
- boolean Grille;
- Grille:=\useKV[ClesStat]{Grille};
- Pasx:=\useKV[ClesStat]{Pasx};
- Pasy:=\useKV[ClesStat]{Pasy};
- if Grille:
- drawoptions(withcolor 0.75white);
- for k=0 step Pasx until ((maxx+1)):
- trace (k*unitex,0)--(k*unitex,unitey*(maxy+2*Pasy));
- endfor;
- for k=0 step Pasy until ((maxy+2*Pasy)):
- trace (0,k*unitey)--(unitex*(maxx+1),k*unitey);
- endfor;
- drawoptions();
- fi;
- if epaisseurbatons<>0:
- for k=1 upto n:
- fill polygone(A[k]-(epaisseurbatons*1pt,0),A[k]+(epaisseurbatons*1pt,0),P[k]+(epaisseurbatons*1pt,0),P[k]-(epaisseurbatons*1pt,0)) withcolor if unknown Col[k]: CoulDefaut else:Col[k] fi;
- if AideLecture:
- draw B[k]--P[k] dashed evenly;
- fi;
- endfor;
- fi;
- if LectureFine:
- for k=0 step Pasy until ((maxy+1*Pasy)):
- if Tiret:
- trace (1pt,k*unitey)--(-1pt,k*unitey);
- if GrandNombrey:
- label.lft(TEX("\num{\fpeval{\useKV[ClesStat]{GrandNombreO}*"&decimal(k+Depart)&"}}"),(0,k*unitey));
- else:
- label.lft(TEX("\num{"&decimal(k+Depart)&"}"),(0,k*unitey));
- fi;
- else:
- if GrandNombrey:
- dotlabel.lft(TEX("\num{\fpeval{\useKV[ClesStat]{GrandNombreO}*"&decimal(k+Depart)&"}}"),(0,k*unitey));
- else:
- dotlabel.lft(TEX("\num{"&decimal(k+Depart)&"}"),(0,k*unitey));
- fi;
- fi;
- endfor;
- fi;
- if Lecture:
- for k=0 step Pasy until Pasy:
- if Tiret:
- trace (1pt,k*unitey)--(-1pt,k*unitey);
- if GrandNombrey:
- label.lft(TEX("\num{\fpeval{\useKV[ClesStat]{GrandNombreO}*"&decimal(k)&"}}"),(0,k*unitey));
- else:
- label.lft(TEX("\num{"&decimal(k)&"}"),(0,k*unitey));
- fi;
- else:
- if GrandNombrey:
- dotlabel.lft(TEX("\num{\fpeval{\useKV[ClesStat]{GrandNombreO}*"&decimal(k)&"}}"),(0,k*unitey));
- else:
- dotlabel.lft(TEX("\num{"&decimal(k)&"}"),(0,k*unitey));
- fi;
- fi;
- endfor;
- fi;
- drawarrow (0,0)--unitex*(maxx+1,0);
- drawarrow (0,0)--unitey*(0,maxy+2*Pasy);
- label.lrt(btex \useKV[ClesStat]{Donnee} etex,unitex*(maxx+1,0));
- label.urt(btex \useKV[ClesStat]{Effectif} etex,unitey*(0,maxy+2*Pasy));
- if Qualitatif: titi(#1); else:tata(#1); fi;
- \end{mplibcode}
- \else
- \begin{mpost}[mpsettings={\MPStatNewCode}]
- % on r\'ecup\`ere les couleurs
- color Col[];
- n:=0;
- for p_=#2:
- n:=n+1;
- if color p_:
- Col[n]=p_;
- else:
- Col[n]=CoulDefaut;
- fi;
- endfor;
- %
- vardef tata(text t)=%affichage quantitatif
- l=0;
- for p_=t:
- if pair p_:
- l:=l+1;
- if Rotation:
- label.bot(LATEX("\num{"&decimal(xpart(p_))&"}") rotated AngleRotation,A[l]);
- else :
- label.bot(LATEX("\num{"&decimal(xpart(p_))&"}"),A[l]);
- fi;
- if Reponses:
- if DonneesSup:
- label.top(LATEX("\num{"&decimal(ypart(p_))&"}"),P[l]);
- else:
- if Tiret:
- trace (B[l]+(-1pt,0))--(B[l]+(1pt,0));
- label.lft(LATEX("\num{"&decimal(p_)&"}"),B[l]);
- else:
- dotlabel.lft(LATEX("\num{"&decimal(ypart(p_))&"}"),B[l]);
- fi;
- fi;
- fi;
- fi;
- endfor;
- enddef;
- vardef titi(text t)=%affichage qualitatif
- l:=0;
- for p_=t:
- if numeric p_:
- if Reponses:
- if DonneesSup:
- label.top(LATEX("\num{"&decimal(p_)&"}"),P[l]);
- else:
- if Tiret:
- trace (B[l]+(-1pt,0))--(B[l]+(1pt,0));
- label.lft(LATEX("\num{"&decimal(p_)&"}"),B[l]);
- else:
- dotlabel.lft(LATEX("\num{"&decimal(p_)&"}"),B[l]);
- fi;
- fi;
- fi;
- else:
- l:=l+1;
- if Rotation:
- if AngleRotation<>0:
- picture TEXTELABEL;
- TEXTELABEL=image(
- labeloffset:=labeloffset*2;
- label.lft(LATEX(p_),A[l]);
- labeloffset:=labeloffset/2;
- );
- trace rotation(TEXTELABEL,A[l],AngleRotation);
- else :
- label.bot(LATEX(p_),A[l]);
- fi;
- fi;
- fi;
- endfor;
- enddef;
- if Qualitatif: tutu(#1); else: toto(#1); fi;
- boolean Grille;
- Grille:=\useKV[ClesStat]{Grille};
- Pasx:=\useKV[ClesStat]{Pasx};
- Pasy:=\useKV[ClesStat]{Pasy};
- if Grille:
- drawoptions(withcolor 0.75white);
- for k=0 step Pasx until ((maxx+1)):
- trace (k*unitex,0)--(k*unitex,unitey*(maxy+2*Pasy));
- endfor;
- for k=0 step Pasy until ((maxy+2*Pasy)):
- trace (0,k*unitey)--(unitex*(maxx+1),k*unitey);
- endfor;
- drawoptions();
- fi;
- if epaisseurbatons<>0:
- for k=1 upto n:
- fill polygone(A[k]-(epaisseurbatons*1pt,0),A[k]+(epaisseurbatons*1pt,0),P[k]+(epaisseurbatons*1pt,0),P[k]-(epaisseurbatons*1pt,0)) withcolor if unknown Col[k]: CoulDefaut else:Col[k] fi;
- if AideLecture:
- draw B[k]--P[k] dashed evenly;
- fi;
- endfor;
- fi;
- if LectureFine:
- for k=0 step Pasy until ((maxy+1*Pasy)):
- if Tiret:
- trace (1pt,k*unitey)--(-1pt,k*unitey);
- label.lft(LATEX("\num{"&decimal(k)&"}"),(0,k*unitey));
- else:
- dotlabel.lft(LATEX("\num{"&decimal(k)&"}"),(0,k*unitey));
- fi;
- endfor;
- fi;
- if Lecture:
- for k=0 step Pasy until Pasy:
- if Tiret:
- trace (1pt,k*unitey)--(-1pt,k*unitey);
- label.lft(LATEX("\num{"&decimal(k)&"}"),(0,k*unitey));
- else:
- dotlabel.lft(LATEX("\num{"&decimal(k)&"}"),(0,k*unitey));
- fi;
- endfor;
- fi;
- drawarrow (0,0)--unitex*(maxx+1,0);
- drawarrow (0,0)--unitey*(0,maxy+2*Pasy);
- label.lrt(btex \useKV[ClesStat]{Donnee} etex,unitex*(maxx+1,0));
- label.urt(btex \useKV[ClesStat]{Effectif} etex,unitey*(0,maxy+2*Pasy));
- if Qualitatif: titi(#1); else:tata(#1); fi;
- \end{mpost}
- \fi
-}
-
-\def\NewMPStatCirculaireCodeQ{%
- Rayon:=\useKV[ClesStat]{Rayon};
- ecarthachures=\useKV[ClesStat]{EcartHachures};
- epaisseurhachures=\useKV[ClesStat]{EpaisseurHachures};
- boolean AffichageAngle,AffichageDonnee,Hachures,Inverse,Legende,LegendeVide,Retour,ACompleter;
- AffichageAngle=\useKV[ClesStat]{AffichageAngle};
- AffichageDonnee=\useKV[ClesStat]{AffichageDonnee};
- Hachures=\useKV[ClesStat]{Hachures};
- Inverse=\useKV[ClesStat]{LectureInverse};
- Legende=\useKV[ClesStat]{Legende};
- LegendeVide=\useKV[ClesStat]{LegendeVide};
- Retour=false;
- ACompleter=\useKV[ClesStat]{ACompleter};
- %
- pair A[],O,B[],C[],D[];
- O=(0,0);
- n:=0;
- numeric total[],ang[];
- total[0]=0;
- ang[0]:=0;
- path cc;
- cc=(fullcircle scaled (2*Rayon));
- %
- vardef AfficheLegende(text t)=
- picture ResultatLegende;
- ResultatLegende=image(
- for p_=t:
- if string p_:
- n:=n+1;
- C[n]=A[n-1] rotatedabout(O,if Inverse:-1* fi(ang[n]-ang[n-1])/2);
- draw 0.95[O,C[n]]--1.05[O,C[n]];
- C[n]:=1.05[O,C[n]];
- Test(n);
- if ((xpart(C[n])>xpart(O)) or (xpart(C[n])=xpart(O))) and ((ypart(C[n])>ypart(O)) or (ypart(C[n])=ypart(O))):
- D[n]=C[n]+(0.5cm,0);
- draw C[n]--D[n];
- if Retour=false:label.urt(TEX(p_),D[n]);fi;
- fi;
- if (xpart(C[n])<xpart(O)) and ((ypart(C[n])>ypart(O)) or (ypart(C[n])=ypart(O))):
- D[n]=C[n]-(0.5cm,0);
- draw C[n]--D[n];
- if Retour=false:label.ulft(TEX(p_),D[n]);fi;
- fi;
- if (xpart(C[n])<xpart(O)) and (ypart(C[n])<ypart(O)):
- D[n]=C[n]-(0.5cm,0);
- draw C[n]--D[n];
- if Retour=false:label.llft(TEX(p_),D[n]);fi;
- fi;
- if ((xpart(C[n])>xpart(O)) or (xpart(C[n])=xpart(O))) and (ypart(C[n])<ypart(O)):
- D[n]=C[n]+(0.5cm,0);
- draw C[n]--D[n];
- if Retour=false:label.lrt(TEX(p_),D[n]);fi;
- fi;
- fi;
- endfor;
- );
- ResultatLegende
- % fi;
- enddef;
- vardef AfficheLegendePDF(text t)=
- picture ResultatLegende;
- ResultatLegende=image(
- for p_=t:
- if string p_:
- n:=n+1;
- C[n]=A[n-1] rotatedabout(O,if Inverse:-1* fi(ang[n]-ang[n-1])/2);
- draw 0.95[O,C[n]]--1.05[O,C[n]];
- C[n]:=1.05[O,C[n]];
- Test(n);
- if (xpart(C[n])>xpart(O)) and ((ypart(C[n])>ypart(O)) or (ypart(C[n])=ypart(O))):
- D[n]=C[n]+(0.5cm,0);
- draw C[n]--D[n];
- if Retour=false:label.urt(LATEX(p_),D[n]);fi;
- fi;
- if (xpart(C[n])<xpart(O)) and ((ypart(C[n])>ypart(O)) or (ypart(C[n])=ypart(O))):
- D[n]=C[n]-(0.5cm,0);
- draw C[n]--D[n];
- if Retour=false:label.ulft(LATEX(p_),D[n]);fi;
- fi;
- if (xpart(C[n])<xpart(O)) and (ypart(C[n])<ypart(O)):
- D[n]=C[n]-(0.5cm,0);
- draw C[n]--D[n];
- if Retour=false:label.llft(LATEX(p_),D[n]);fi;
- fi;
- if (xpart(C[n])>xpart(O)) and (ypart(C[n])<ypart(O)):
- D[n]=C[n]+(0.5cm,0);
- draw C[n]--D[n];
- if Retour=false:label.lrt(LATEX(p_),D[n]);fi;
- fi;
- fi;
- endfor;
- );
- ResultatLegende
- % fi;
- enddef;
-}
-
-% la construction du graphique qualitatif
-\def\NewMPStatCirculaireQ#1#2#3#4{%
- %#1 : la liste des données
- %#2 : 360 ou 180
- %#3 : liste des couleurs
- %#4 : liste des légendes à effacer.
- \ifluatex
- \mplibforcehmode
- \begin{mplibcode}
- \NewMPStatCirculaireCodeQ
- if Inverse=false:
- A[0]=point(0) of cc;
- else:
- A[0]=point(180) of cc;
- fi;
- % on r\'ecup\`ere les couleurs
- color Col[];
- n:=0;
- for p_=#3:
- n:=n+1;
- Col[n]=p_;
- endfor;
- vardef toto(text t)=
- n:=0;
- for p_=t:
- if numeric p_:
- n:=n+1;
- total[n]:=total[n-1]+p_;
- fi;
- endfor;
- N=n;
- for k=1 upto N:
- ang[k]=(#2/total[N])*total[k];
- endfor;
- n:=0;
- for p_=t:
- if numeric p_:
- n:=n+1;
- if Inverse=false:
- A[n]=A[n-1] rotatedabout(O,p_*(#2/total[N]));
- else:
- A[n]=A[n-1] rotatedabout(O,-p_*(#2/total[N]));
- fi;
- %hachure ou pas ?
- if Hachures=false:
- fill (O--if Inverse=false:arccercle(A[n-1],A[n],O) else:
- arccercle(A[n],A[n-1],O) fi--cycle) withcolor if unknown Col[n]: white else:Col[n] fi;
- else:
- draw
- Hachurage((O--if Inverse=false:arccercle(A[n-1],A[n],O)
- else:arccercle(A[n],A[n-1],O) fi--cycle),p_*(#2/total[N]) if
- (n mod 2)=0: +90 else: -90 fi,ecarthachures,if (n mod 2)=0 : 0 else: 1 fi)
- withpen pencircle scaled epaisseurhachures if AffichageAngle: withcolor 0.5white fi;
- fi;
- if ACompleter=false:
- draw A[n-1]--O--A[n] if Hachures: withpen pencircle scaled2 fi;
- fi;
- % Affichage des angles associ\'es
- if AffichageAngle:
- if round(p_*(#2/total[N]))>15:
- if (n mod 2)=0:
- marque_a:=20*0.75*Rayon/cm;
- else:
- marque_a:=20*0.5*Rayon/cm;
- fi;
- if Hachures:
- if Inverse=false:
- undraw
- Codeangle(A[n-1],O,A[n],0,(((TEX("\ang{"&decimal(round(p_*(#2/total[N])))&"}")))));
- else:
- undraw
- Codeangle(A[n],O,A[n-1],0,(((TEX("\ang{"&decimal(round(p_*(#2/total[N])))&"}")))));
- fi;
- fill cercles(w shifted(marque_ang*unitvector(w-O)),3mm) withcolor
- blanc;
- fi;
- if Inverse=false:
- draw
- Codeangle(A[n-1],O,A[n],0,(((TEX("\ang{"&decimal(round(p_*(#2/total[N])))&"}")))));
- else:
- draw
- Codeangle(A[n],O,A[n-1],0,(((TEX("\ang{"&decimal(round(p_*(#2/total[N])))&"}")))));
- fi;
- fi;
- elseif AffichageDonnee:
- if round(p_*(#2/total[N]))>15:
- if (n mod 2)=0:
- marque_a:=20*0.75*Rayon/cm;
- else:
- marque_a:=20*0.5*Rayon/cm;
- fi;
- if Hachures:
- if Inverse=false:
- undraw
- Codeangle(A[n-1],O,A[n],0,TEX(""&decimal(p_)&""));
- else:
- undraw
- Codeangle(A[n],O,A[n-1],0,(((TEX(""&decimal(p_)&"")))));
- fi;
- fill cercles(w shifted(marque_ang*unitvector(w-O)),3mm) withcolor
- blanc;
- fi;
- if Inverse=false:
- draw
- Codeangle(A[n-1],O,A[n],0,(((TEX(""&decimal(p_)&"")))));
- else:
- draw
- Codeangle(A[n],O,A[n-1],0,(((TEX(""&decimal(p_)&"")))));
- fi;
- fi;
- fi;
- %
- fi;
- endfor;
- if #2=360:
- draw cc if Hachures: withpen pencircle scaled2 fi;
- else:
- draw (subpath(0,length cc/2) of cc)--cycle if Hachures: withpen pencircle scaled2 fi;;
- fi;
- n:=0;
- enddef;
- vardef Test(expr nb)=
- Retour:=false;
- op:=0;
- for l_=#4:
- if l_=nb:
- op:=op+1;
- fi;
- endfor;
- if op>0:
- Retour:=true;
- fi;
- enddef;
- Figure(-10u,-10u,10u,10u);
- toto(#1);
- if Legende:
- n:=0;
- draw AfficheLegende(#1);
- fi;
- \end{mplibcode}
- \else
- \begin{mpost}[mpsettings={\NewMPStatCirculaireCodeQ}]
- pair A[],O,B[],C[],D[];
- O=(0,0);
- n:=0;
- numeric total[],ang[];
- total[0]=0;
- ang[0]:=0;
- path cc;
- cc=(fullcircle scaled (2*Rayon));
- % on r\'ecup\`ere les couleurs
- color Col[];
- n:=0;
- for p_=#3:
- n:=n+1;
- Col[n]=p_;
- endfor;
- if Inverse=false:
- A[0]=point(0) of cc;
- else:
- A[0]=point(180) of cc;
- fi;
- vardef toto(text t)=
- n:=0;
- for p_=t:
- if numeric p_:
- n:=n+1;
- total[n]:=total[n-1]+p_;
- fi;
- endfor;
- N=n;
- for k=1 upto N:
- ang[k]=(#2/total[N])*total[k];
- endfor;
- n:=0;
- for p_=t:
- if numeric p_:
- n:=n+1;
- if Inverse=false:
- A[n]=A[n-1] rotatedabout(O,p_*(#2/total[N]));
- else:
- A[n]=A[n-1] rotatedabout(O,-p_*(#2/total[N]));
- fi;
- %hachure ou pas ?
- if Hachures=false:
- fill (O--if Inverse=false:arccercle(A[n-1],A[n],O) else:
- arccercle(A[n],A[n-1],O) fi--cycle) withcolor if unknown Col[n]: white else:Col[n] fi;
- else:
- draw
- Hachurage((O--if Inverse=false:arccercle(A[n-1],A[n],O)
- else:arccercle(A[n],A[n-1],O) fi--cycle),p_*(#2/total[N]) if
- (n mod 2)=0: +90 else: -90 fi,ecarthachures,if (n mod 2)=0 : 0 else: 1 fi)
- withpen pencircle scaled epaisseurhachures if AffichageAngle: withcolor 0.5white fi;
- fi;
- if ACompleter=false:
- draw A[n-1]--O--A[n] if Hachures: withpen pencircle scaled2 fi;
- fi;
- % Affichage des angles associ\'es
- if AffichageAngle:
- if round(p_*(#2/total[N]))>15:
- if (n mod 2)=0:
- marque_a:=20*0.75*Rayon/cm;
- else:
- marque_a:=20*0.5*Rayon/cm;
- fi;
- if Hachures:
- if Inverse=false:
- undraw
- Codeangle(A[n-1],O,A[n],0,(((LATEX("\ang{"&decimal(round(p_*(#2/total[N])))&"}")))));
- else:
- undraw
- Codeangle(A[n],O,A[n-1],0,(((LATEX("\ang{"&decimal(round(p_*(#2/total[N])))&"}")))));
- fi;
- fill cercles(w shifted(marque_ang*unitvector(w-O)),3mm) withcolor
- blanc;
- fi;
- if Inverse=false:
- draw
- Codeangle(A[n-1],O,A[n],0,(((LATEX("\ang{"&decimal(round(p_*(#2/total[N])))&"}")))));
- else:
- draw
- Codeangle(A[n],O,A[n-1],0,(((LATEX("\ang{"&decimal(round(p_*(#2/total[N])))&"}")))));
- fi;
- fi;
- elseif AffichageDonnee:
- if round(p_*(#2/total[N]))>15:
- if (n mod 2)=0:
- marque_a:=20*0.75*Rayon/cm;
- else:
- marque_a:=20*0.5*Rayon/cm;
- fi;
- if Hachures:
- if Inverse=false:
- undraw
- Codeangle(A[n-1],O,A[n],0,LATEX(""&decimal(p_)&""));
- else:
- undraw
- Codeangle(A[n],O,A[n-1],0,(((LATEX(""&decimal(p_)&"")))));
- fi;
- fill cercles(w shifted(marque_ang*unitvector(w-O)),3mm) withcolor
- blanc;
- fi;
- if Inverse=false:
- draw
- Codeangle(A[n-1],O,A[n],0,(((LATEX(""&decimal(p_)&"")))));
- else:
- draw
- Codeangle(A[n],O,A[n-1],0,(((LATEX(""&decimal(p_)&"")))));
- fi;
- fi;
- fi;
- %
- fi;
- endfor;
- if #2=360:
- draw cc if Hachures: withpen pencircle scaled2 fi;
- else:
- draw (subpath(0,length cc/2) of cc)--cycle if Hachures: withpen pencircle scaled2 fi;;
- fi;
- enddef;
- vardef Test(expr nb)=
- Retour:=false;
- op:=0;
- for l_=#4:
- if l_=nb:
- op:=op+1;
- fi;
- endfor;
- if op>0:
- Retour:=true;
- fi;
- enddef;
- Figure(-10u,-10u,10u,10u);
- toto(#1);
- if Legende:
- n:=0;
- draw AfficheLegendePDF(#1);
- fi;
- \end{mpost}
- \fi
-}%
-
-%Pour la m\'ediane.
-\DTLgnewdb{mtdb}%
-\dtlexpandnewvalue%
-\newcount\nbdonnees%
-%
-\def\AjoutListEEaa#1\nil{\addtotok\tabtoksEEa{#1,}}%
-\def\AjoutListEEab#1\nil{\addtotok\tabtoksEEa{#1/}}%
-\def\AjoutListEEb#1\nil{\addtotok\tabtoksEEb{#1,}}%
-\def\AjoutListEEx#1\nil{\addtotok\tabtoksEE{#1,}}%
-\def\AjoutListEEy#1\nil{\addtotok\tabtoksEE{#1/}}%
-
-\DTLgnewdb{mtdbEE}%
-\DTLgnewdb{mtdbEEqual}%
-%
-
-% Pour les classes
-% Pour construire l'histogramme
-\def\UpdatetoksHisto#1/#2/#3\nil{\addtotok\toklisteelmtsclasse{#1,#2,}\addtotok\toklistedonhisto{#3,}}
-\def\UpdatetoksECC#1\nil{\addtotok\toklistedonhisto{#1,}}
-
-\NewDocumentCommand\buildgraphhisto{}{%
- \newtoks\toklisteelmtsclasse%
- \newtoks\toklistedonhisto%
- \newtoks\toklistecouleur%
- \newtoks\toklistelegende%
- \ifboolKV[ClesStat]{LegendeVide}{%
- \xdef\foo{\useKV[ClesStat]{LegendesVides}}%
- \readlist*\ListeLegendesAEffacer{\foo}%
- }{\xdef\foo{-1}\readlist*\ListeLegendesAEffacer{\foo}%
- }%
- \foreachitem\compteur\in\ListeLegendesAEffacer{\expandafter\UpdateLegende\compteur\nil}%
- \foreachitem\compteur\in\ListeDepart{\expandafter\UpdatetoksHisto\compteur\nil}%
- \ifboolKV[ClesStat]{ECC}{%
- \toklistedonhisto{}%
- \xdef\PfCFooECC{\ListeDepart[1,3]}%
- \xintFor* ##1 in{\xintSeq{2}{\ListeDepartlen}}\do{%
- \xdef\PfCFooRetiens{0}%
- \xintFor* ##2 in{\xintSeq{1}{##1}}\do{%
- \xdef\PfCFooRetiens{\fpeval{\PfCFooRetiens+\ListeDepart[##2,3]}}%
- }%
- \xdef\PfCFooECC{\PfCFooECC,\PfCFooRetiens}%
- }%
- \readlist*\PfCListeECC{\PfCFooECC}%
- \foreachitem\compteur\in\PfCListeECC{\expandafter\UpdatetoksECC\compteur\nil}%
- }{}%
- \xdef\PfCEcartClasse{\fpeval{\ListeDepart[1,2]-\ListeDepart[1,1]}}%
- \foreachitem\compteur\in\ListeDepart{%
- \xdef\PfCEcartClasse{\PfCEcartClasse,\fpeval{\ListeDepart[\compteurcnt,2]-\ListeDepart[\compteurcnt,1]}}
- }%
- \xintifboolexpr{\fpeval{min(\PfCEcartClasse)}==\fpeval{max(\PfCEcartClasse)}}{}{\setKV[ClesStat]{MemeAmpli=false}}
- % Pour les couleurs
- \xdef\ListeAvantCouleurs{\useKV[ClesStat]{ListeCouleurs}}%
- \readlist*\ListeCouleur{\ListeAvantCouleurs}%
- \foreachitem\couleur\in\ListeCouleur{\expandafter\UpdateCoul\couleur\nil}%
- %
- \MPBuildHisto{\the\toklisteelmtsclasse}{\the\toklistedonhisto}{\the\toklistecouleur}{\the\toklistelegende}%
-}
-
-%% calcul des fr\'equences
-\newcommand\CalculFrequenceClasses[1]{%
- \fpeval{round(\ListeDepart[#1,3]*100/\EffectifTotal,\useKV[ClesStat]{PrecisionF})}
-}
-
-\newcommand\CalculECCClasses[1]{%
- \xdef\TotalECCC{0}%
- \CompteurECCC=1%
- \CompteurECCCTotal=\numexpr#1+1%
- \whiledo{\CompteurECCC < \CompteurECCCTotal}{%
- \xdef\TotalECCC{\fpeval{\TotalECCC+\ListeDepart[\the\CompteurECCC,3]}}%
- \CompteurECCC=\numexpr\CompteurECCC+1%
- }%
- \num{\TotalECCC}%
-}
-
-\NewDocumentCommand\buildtabclasses{}{%
- \setcounter{PfCCompteLignes}{0}%
- \renewcommand{\arraystretch}{\useKV[ClesStat]{Stretch}}%
- \begin{NiceTabular}{l*{\ListeDepartlen}{c}}%[hvlines]
- \CodeBefore%
- \rowcolor{\useKV[ClesStat]{CouleurTab}}{1}%
- \columncolor{\useKV[ClesStat]{CouleurTab}}{1}%
- \Body
- \useKV[ClesStat]{Donnee}\xintFor* ##1 in{\xintSeq{1}{\ListeDepartlen}}\do{%
- &$\num{\ListeDepart[##1,1]}\leqslant\dots<\num{\ListeDepart[##1,2]}$
- }\\
- \useKV[ClesStat]{Effectif}\xintFor* ##1 in{\xintSeq{1}{\ListeDepartlen}}\do{%
- &\ifboolKV[ClesStat]{EffVide}{}{\num{\ListeDepart[##1,3]}}%
- }\\
- \ifboolKV[ClesStat]{Frequence}{\stepcounter{PfCCompteLignes}Fr\'equence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeDepartlen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\num{\CalculFrequenceClasses{##1}}}}}\\
- }{}%
- \ifboolKV[ClesStat]{ECC}{\stepcounter{PfCCompteLignes}E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeDepartlen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECCClasses{##1}}}}\\}{}%
- \CodeAfter%
- % On crée la liste des colonnes à vider
- \xintifboolexpr{\useKV[ClesStat]{ColVide}>0}{%
- \xdef\FooStat{\useKV[ClesStat]{ColVide}}%
- \setsepchar{,}%
- \readlist*\ListeColonnesAVider{\FooStat}%
- \foreachitem\compteur\in\ListeColonnesAVider{%
- \tikz\fill[white] (row-2-|col-\fpeval{\compteur+1}) rectangle (last-|col-\fpeval{\compteur+2});%
- }%
- }{}%
-% % On crée la liste des cases à vider
- \ifboolKV[ClesStat]{CaseVide}{%
- \xdef\FooStatCases{\useKV[ClesStat]{CasesVides}}%
- \setsepchar[*]{,*/}%
- \readlist*\ListeCasesAVider{\FooStatCases}%
- \foreachitem\compteur\in\ListeCasesAVider{%
- \tikz\fill[white] (row-\fpeval{\ListeCasesAVider[\compteurcnt,1]+1}-|col-\fpeval{\ListeCasesAVider[\compteurcnt,2]+1}) rectangle (row-\fpeval{\ListeCasesAVider[\compteurcnt,1]+2}-|col-\fpeval{\ListeCasesAVider[\compteurcnt,2]+2});%
- }%
- }{}%
-% % On retrace le tableau
-% % Les colonnes
- \xintFor* ##1 in {\xintSeq{1}{\fpeval{\ListeDepartlen+2}}}\do{%
- \tikz\draw (row-1-|col-##1) -- (last-|col-##1);%
- }%
-% % Les lignes
- \xintFor* ##1 in {\xintSeq{1}{\fpeval{\thePfCCompteLignes+3}}}\do{%
- \tikz\draw (row-##1-|col-1) -- (row-##1-|last);%
- }%
- \end{NiceTabular}
-}%
-
-\NewDocumentCommand\MPBuildHisto{mmmm}{%
- \ifluatex
- \mplibforcehmode
- \begin{mplibcode}
- maxx:=-infinity;
- minx:=infinity;
- maxy:=-infinity;
- miny:=0;
- unitex:=\useKV[ClesStat]{Unitex}*cm;
- unitey:=\useKV[ClesStat]{Unitey}*cm;
- Pasx:=\useKV[ClesStat]{Pasx};
- Pasy:=\useKV[ClesStat]{Pasy};
- UniteAire=\useKV[ClesStat]{UniteAire};
- Ecarthachures=\useKV[ClesStat]{EcartHachures};
- Epaisseurhachures=\useKV[ClesStat]{EpaisseurHachures};
- boolean MemeAmpli,Hachures,Lecture,LectureFine,AideLecture,DonneesSup,Tiret,LegendeVide,Retour,Mediane,ECC;
- ECC=\useKV[ClesStat]{ECC};
- Mediane=\useKV[ClesStat]{Mediane};
- MemeAmpli=\useKV[ClesStat]{MemeAmpli};
- Hachures:=\useKV[ClesStat]{Hachures};
- %
- Lecture:=\useKV[ClesStat]{Lecture};
- LectureFine:=\useKV[ClesStat]{LectureFine};
- Tiret=\useKV[ClesStat]{Tiret};
- AideLecture:=\useKV[ClesStat]{AideLecture};
- DonneesSup:=\useKV[ClesStat]{DonneesSup};
- LegendeVide=\useKV[ClesStat]{LegendeVide};
- Retour=false;
- % Test affichage
- vardef Test(expr nb)=
- Retour:=false;
- op:=0;
- for l_=#4:
- if l_=nb:
- op:=op+1;
- fi;
- endfor;
- if op>0:
- Retour:=true;
- fi;
- enddef;
- %Affichage ou pas des légendes
- vardef AfficheLegende(text t)=
- l=0;
- for p_=t:
- l:=l+1;
- if DonneesSup:
- Test(l);
- if Retour=false:
- label.top(TEX("\num{"&decimal(Y[l])&"}"),(unitex*(Depart+(0.5*(X[2*l]+X[2*l-2])-X[1])/Pasx),unitey*Z[l]));
- fi;
- fi;
- endfor;
- enddef;
- % on r\'ecup\`ere les couleurs
- Depart=\useKV[ClesStat]{DepartHisto};
- color Col[],CoulDefaut;
- CoulDefaut=white;
- n:=0;
- for p_=#3:
- n:=n+1;
- Col[n]=p_;
- endfor;
- %
- numeric X[];
- numeric ecartabs[];
- vardef RecupValeursAbscisses(text t)=
- p:=0;
- for p_=t:
- p:=p+1;
- X[p]:=p_;
- if X[p]<minx:
- minx:=X[p];
- fi;
- if X[p]>maxx:
- maxx:=X[p];
- fi;
- endfor;
- X[0]=X[1];
- TotalAbscisses=p;
- enddef;
- numeric Y[],Z[];
- numeric EffectifTotal[];
- numeric EffectifTotalA[];
- vardef RecupValeursDonnees(text t)=
- p:=0;
- EffectifTotal[0]:=0;
- EffectifTotalA[0]:=0;
- for p_=t:
- p:=p+1;
- EffectifTotal[p]:=p_;
- EffectifTotalA[p]:=EffectifTotalA[p-1]+p_;
- Y[p]:=p_;
- Z[p]=(Y[p]/(UniteAire*(X[2*p]-X[2*p-1])/Pasx));
- R[p]=ceiling(Z[p]);
- if R[p]>maxy:
- maxy:=R[p];
- fi;
- endfor;
- NbDonnees:=p;
- enddef;
- %On affiche la médiane dans le cas des ECC
- vardef AfficheMedianeECC(text t)=
- YMed:=Z[NbDonnees]/2;
- DemiDonnees:=EffectifTotal[NbDonnees]/2;
- p:=0;
- forever:
- p:=p+1;
- exitif EffectifTotal[p]>DemiDonnees;
- endfor;
- path MedHor,MedLineaire,MedVer;
- MedLineaire=(unitex*(Depart+(X[2*p-2]-X[1]/Pasx)),unitey*Z[p-1])--(unitex*(Depart+(X[2*p]-X[1])/Pasx),unitey*Z[p]);
- MedHor=((0,unitey*YMed)--(unitex*((maxx-minx)/Pasx+2),unitey*YMed));
- MedVer=(xpart(MedLineaire intersectionpoint MedHor),0)--(MedLineaire intersectionpoint MedHor);
- draw MedLineaire;
- draw MedHor;
- draw MedVer;
- enddef;
- % On affiche la médiane dans le cas non ECC
- vardef AfficheMediane(text t)=
- DemiDonnees:=EffectifTotalA[NbDonnees]/2;
- p:=0;
- forever:
- p:=p+1;
- exitif EffectifTotalA[p]>DemiDonnees;
- endfor;
- path MedVer;
- numeric CoefLineaire,pMed;
- pMed=p;
- CoefLineaire=(DemiDonnees-EffectifTotalA[p-1])/Y[p];
- MedVer=(unitex*(Depart+(X[2*p-2]-X[1])/Pasx+CoefLineaire*(X[2*p]-X[2*p-2])/Pasx),0)--(unitex*(Depart+(X[2*p-2]-X[1])/Pasx+CoefLineaire*(X[2*p]-X[2*p-2])/Pasx),unitey*Z[p]);
- draw MedVer dashed evenly;
- enddef;
- % On commence le tracé : on récupère les informations
- RecupValeursAbscisses(#1);
- RecupValeursDonnees(#2);
- % on définit une grille
- vardef Grille=
- if MemeAmpli:
- Ajout:=1;
- else:
- Ajout:=3;
- fi;
- drawoptions(withcolor 0.7white);
- for k=0 upto ((maxx-minx)/Pasx+2):
- trace (unitex*k,0)--(unitex*k,(maxy+Ajout)*unitey);%withcolor red;
- endfor;
- for k=0 upto (maxy+Ajout):
- trace (0,k*unitey)--(unitex*((maxx-minx)/Pasx+2),k*unitey);% withcolor blue;
- endfor;
- drawoptions();
- enddef;
- % Fin Grille
- % On trace les rectangles
- vardef AfficheRectangles=
- if Hachures:
- Grille;
- for k=2 step 2 until TotalAbscisses:
- draw hachurage(polygone(unitex*(Depart+(X[k]-X[1])/Pasx,0),(unitex*(Depart+(X[k]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),0)),60,0.2,0);
- draw chemin(unitex*(Depart+(X[k]-X[1])/Pasx,0),(unitex*(Depart+(X[k]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),0));
- endfor;
- else:
- for k=2 step 2 until TotalAbscisses:
- fill polygone(unitex*(Depart+(X[k]-X[1])/Pasx,0),(unitex*(Depart+(X[k]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),0)) withcolor if unknown Col[k/2]: CoulDefaut else: Col[k/2] fi;
- endfor;
- Grille;
- for k=2 step 2 until TotalAbscisses:
- draw chemin(unitex*(Depart+(X[k]-X[1])/Pasx,0),(unitex*(Depart+(X[k]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),0));
- endfor;
- fi;
- enddef;
- % Affichage final
- if ECC:
- AfficheRectangles;
- if Mediane:
- AfficheMedianeECC(#2);
- fi;
- else:
- if Mediane:
- AfficheMediane(#2);
- if Hachures:
- Grille;
- %Partie gauche
- for k=2 step 2 until (2*pMed-2):
- draw hachurage(polygone(unitex*(Depart+(X[k]-X[1])/Pasx,0),(unitex*(Depart+(X[k]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),0)),60,0.2,0);
- draw chemin(unitex*(Depart+(X[k]-X[1])/Pasx,0),(unitex*(Depart+(X[k]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),0));
- endfor;
- draw hachurage(polygone(unitex*(Depart+(X[2*pMed-2]-X[1])/Pasx,0),point(0) of MedVer,point(1) of MedVer,(unitex*(Depart+(X[2*pMed-2]-X[1])/Pasx),unitey*Z[pMed])),60,0.2,0);
- draw polygone(unitex*(Depart+(X[2*pMed-2]-X[1])/Pasx,0),point(0) of MedVer,point(1) of MedVer,(unitex*(Depart+(X[2*pMed-2]-X[1])/Pasx),unitey*Z[pMed]));
- % Partie droite
- for k=2*pMed+2 step 2 until TotalAbscisses:
- draw hachurage(polygone(unitex*(Depart+(X[k]-X[1])/Pasx,0),(unitex*(Depart+(X[k]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),0)),120,0.2,1);
- draw chemin(unitex*(Depart+(X[k]-X[1])/Pasx,0),(unitex*(Depart+(X[k]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),0));
- endfor;
- draw hachurage(polygone(unitex*(Depart+(X[2*pMed]-X[1])/Pasx,0),point(0) of MedVer,point(1) of MedVer,(unitex*(Depart+(X[2*pMed]-X[1])/Pasx),unitey*Z[pMed])),120,0.2,1);
- draw polygone(unitex*(Depart+(X[2*pMed]-X[1])/Pasx,0),point(0) of MedVer,point(1) of MedVer,(unitex*(Depart+(X[2*pMed]-X[1])/Pasx),unitey*Z[pMed]));
- else:
- %Partie gauche
- for k=2 step 2 until (2*pMed-2):
- fill polygone(unitex*(Depart+(X[k]-X[1])/Pasx,0),(unitex*(Depart+(X[k]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),0)) withcolor if unknown Col[1]: CoulDefaut else: Col[1] fi;
- endfor;
- fill polygone(unitex*(Depart+(X[2*pMed-2]-X[1])/Pasx,0),point(0) of MedVer,point(1) of MedVer,(unitex*(Depart+(X[2*pMed-2]-X[1])/Pasx),unitey*Z[pMed])) withcolor if unknown Col[1]: CoulDefaut else: Col[1] fi ;
- % Partie droite
- for k=2*pMed+2 step 2 until TotalAbscisses:
- fill polygone(unitex*(Depart+(X[k]-X[1])/Pasx,0),(unitex*(Depart+(X[k]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),0)) withcolor if unknown Col[2]: CoulDefaut else: Col[2] fi;
- endfor;
- fill polygone(unitex*(Depart+(X[2*pMed]-X[1])/Pasx,0),point(0) of MedVer,point(1) of MedVer,(unitex*(Depart+(X[2*pMed]-X[1])/Pasx),unitey*Z[pMed])) withcolor if unknown Col[2]: CoulDefaut else: Col[2] fi;
- Grille;
- %Partie Gauche
- for k=2 step 2 until (2*pMed-2):
- trace polygone(unitex*(Depart+(X[k]-X[1])/Pasx,0),(unitex*(Depart+(X[k]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),0));
- endfor;
- trace polygone(unitex*(Depart+(X[2*pMed-2]-X[1])/Pasx,0),point(0) of MedVer,point(1) of MedVer,(unitex*(Depart+(X[2*pMed-2]-X[1])/Pasx),unitey*Z[pMed]));%(Y[pMed]/(UniteAire*(X[2*pMed-2]-X[2*pMed-3])/Pasx))));
- for k=2*pMed+2 step 2 until TotalAbscisses:
- draw chemin(unitex*(Depart+(X[k]-X[1])/Pasx,0),(unitex*(Depart+(X[k]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),unitey*(Y[k/2]/(UniteAire*(X[k]-X[k-1])/Pasx))),(unitex*(Depart+(X[k-1]-X[1])/Pasx),0));
- endfor;
- draw polygone(unitex*(Depart+(X[2*pMed]-X[1])/Pasx,0),point(0) of MedVer,point(1) of MedVer,(unitex*(Depart+(X[2*pMed]-X[1])/Pasx),unitey*Z[pMed]));
- fi;
- draw MedVer withpen pencircle scaled 2;
- else:
- AfficheRectangles;
- fi;
- fi;
- %Affichage ou pas des axes, de la médiane
- if MemeAmpli:
- drawarrow (0,0)--unitey*(0,maxy+1);
- EcartAmpli:=(X[2]-X[1])/Pasx;
- if AideLecture:
- for k=2 step 2 until TotalAbscisses:
- trace ((unitex*(Depart+(X[k]-X[1])/Pasx),unitey*Z[k/2]))--(unitey*(0,Z[k/2])) dashed evenly;
- endfor;
- fi;
- if LectureFine:
- for k=0 upto ((maxy+1)):
- if Tiret:
- trace (1pt,k*unitey)--(-1pt,k*unitey);
- label.lft(TEX("\num{"&decimal(k*UniteAire*EcartAmpli)&"}"),(0,k*unitey));
- else:
- dotlabel.lft(TEX("\num{"&decimal(k*UniteAire*EcartAmpli)&"}"),(0,k*unitey));
- fi;
- endfor;
- fi;
- if Lecture:
- for k=0 upto 1:
- if Tiret:
- trace (1pt,k*unitey)--(-1pt,k*unitey);
- label.lft(TEX("\num{"&decimal(k*UniteAire*EcartAmpli)&"}"),(0,k*unitey));
- else:
- dotlabel.lft(TEX("\num{"&decimal(k*UniteAire*EcartAmpli)&"}"),(0,k*unitey));
- fi;
- endfor;
- fi;
- else:%Pas même ampli : on n'affiche pas l'axe vertical
- trace hachurage(polygone((unitex,unitey*(maxy+2)),(unitex*2,unitey*(maxy+2)),(unitex*2,unitey*(maxy+1)),(unitex,unitey*(maxy+1))),60,0.2,0);
- trace polygone((unitex,unitey*(maxy+2)),(unitex*2,unitey*(maxy+2)),(unitex*2,unitey*(maxy+1)),(unitex,unitey*(maxy+1)));
- label.rt(TEX(decimal(UniteAire)&"~\useKV[ClesStat]{Effectif}"),(unitex*2,unitey*(maxy+1.5)));
-% if Mediane:
-% AfficheMediane(#2);
-% fi;
- fi;
- % On trace l'axe des abscisses
- drawarrow (0,0)--unitex*((maxx-minx)/Pasx+2,0);
- %On labelise l'axe des abscisses
- dotlabel.bot(TEX("\num{"&decimal(X[1])&"}"),unitex*(Depart,0));
- for k=2 step 2 until TotalAbscisses:
- dotlabel.bot(TEX("\num{"&decimal(X[k])&"}"),unitex*(Depart+(X[k]-X[1])/Pasx,0));
- endfor;
- label.rt(TEX("\useKV[ClesStat]{Donnee}"),(unitex*((maxx-minx)/Pasx+2),0));
- %On affiche les données sup ou pas.
- AfficheLegende(#2);
- \end{mplibcode}
- \fi
-}
-%
-
-\newcommand\Stat[2][]{%
- \useKVdefault[ClesStat]%
- \setKV[ClesStat]{#1}%
- \ifboolKV[ClesStat]{UneMediane}{\renewcommand{\PfCArticleMediane}{une}}{\renewcommand{\PfCArticleMediane}{la}}%
- \setsepchar[*]{,*/}%
- \readlist*\ListeAvantUtilisation{#2}%
- \xintifboolexpr{\listlen\ListeAvantUtilisation[1]==3}{\setKV[ClesStat]{Classes}}{}%
- \ifboolKV[ClesStat]{Classes}{%
- \setsepchar[*]{,*/}%
- \readlist*\ListeDepart{#2}%
- \xdef\EffectifTotal{0}%
- \xintFor* ##1 in{\xintSeq{1}{\ListeDepartlen}}\do{%
- \xdef\EffectifTotal{\fpeval{\EffectifTotal+\ListeDepart[##1,3]}}%
- }%
- \ifboolKV[ClesStat]{Histogramme}{%
- \buildgraphhisto%
- }{%
- \ifboolKV[ClesStat]{Tableau}{%
- \buildtabclasses%
- }{}%
- }%
- }{%
- \setsepchar{,}%
- \ifboolKV[ClesStat]{Representation}{%
- \setKV[TraceG]{Xmin=0,Ymin=0}%
- \setKV[TraceG]{#1}%
- \readlist*\ListePointsPlaces{#2}%
- \newtoks\toklistepoint%
- \foreachitem\compteur\in\ListePointsPlaces{\expandafter\Updatetoks\compteur\nil}%
- \MPPlacePoint[#1]{\the\toklistepoint}%
- }{%
- \ifboolKV[ClesStat]{Liste}{%
- \setsepchar{,}\ignoreemptyitems%
- \readlist*\Liste{#2}%
- \xdef\foo{}%
- \setsepchar[*]{,*/}\ignoreemptyitems%
- \xintFor* ##1 in {\xintSeq {1}{\Listelen}}\do{%
- \xdef\foo{\foo 1/\Liste[##1],}%
- }%
- \readlist*\ListeComplete{\foo}%
- \setKV[ClesStat]{Qualitatif}%
- }{%
- \ifboolKV[ClesStat]{Sondage}{%
- \setsepchar{,}\ignoreemptyitems%
- \readlist*\Liste{#2}%
- % "liste vide"
- \newtoks\tabtoksEEa%
- \tabtoksEEa{}%
- %
- % "liste vide"
- \newtoks\tabtoksEEb%
- \tabtoksEEb{}%
- %
- \readlist*\ListeSansDoublonsEE{999}% %% Pour ne pas avoir une liste vide
- %
- \newcount\cmptEE%
- \newcount\PasNumEE% %% Permettra de savoir si ce sondage est qualitatif ou quantitatif
- \PasNumEE=0\relax%
- \DTLcleardb{mtdbEE}%
- % on range les resultats du sondage par ordre croissant.
- \foreachitem\x\in\Liste{%
- \DTLnewrow{mtdbEE}%
- \DTLnewdbentry{mtdbEE}{Numeric}{\x}%
- }%
- \dtlsort{Numeric}{mtdbEE}{\dtlicompare}%
- \DTLforeach{mtdbEE}{\nba=Numeric}{%
- \IfDecimal{\nba}{}{\PasNumEE=\numexpr\PasNumEE+1\relax}%
- \cmptEE=0\relax%
- \foreachitem\nbb\in\ListeSansDoublonsEE{%
- \ifthenelse{\equal{\nba}{\nbb}}{\cmptEE=\numexpr\cmptEE+1\relax}{}%
- }%
- \ifthenelse{\equal{\the\cmptEE}{0}}{%
- \expandafter\AjoutListEEb\nba\nil%
- \xdef\listEEa{\the\tabtoksEEb}%
- \ignoreemptyitems%
- \setsepchar{,}%
- \readlist*\ListeSansDoublonsEE\listEEa% %%% Enl\`eve tous les \'elements
- %%% identiques de Liste
- }{}%
- }%
- \foreachitem\nba\in\ListeSansDoublonsEE{%
- \cmptEE=0\relax%
- \DTLforeach{mtdbEE}{\nbb=Numeric}{%
- \ifthenelse{\equal{\nba}{\nbb}}{\cmptEE=\numexpr\cmptEE+1\relax}{}%
- }%
- \expandafter\AjoutListEEab\nba\nil%
- \expandafter\AjoutListEEaa\the\cmptEE\nil% %%% Compte tous les \'elements
- %%% identiques de Liste
- }%
- \xdef\listEEb{\the\tabtoksEEa}
- \ignoreemptyitems%
- \setsepchar[*]{,*/}%
- \readlist*\ListeComplete\listEEb%
- %
- \ifthenelse{\equal{\the\PasNumEE}{0}}{\setKV[ClesStat]{Quantitatif}}{\setKV[ClesStat]{Qualitatif}}%
- }{%
- \ifboolKV[ClesStat]{Qualitatif}{%
- % % on lit la liste \'ecrite sous la forme valeur/effectif
- \setsepchar[*]{,*/}\ignoreemptyitems%
- \readlist*\ListeInitiale{#2}%
- % "liste vide"
- \newtoks\tabtoksEE%
- \tabtoksEE{}%
- \DTLcleardb{mtdbEEqual}%
- \foreachitem\x\in\ListeInitiale{%
- \DTLnewrow{mtdbEEqual}%
- \itemtomacro\ListeInitiale[\xcnt,1]\x%
- \DTLnewdbentry{mtdbEEqual}{Val}{\x}%
- \itemtomacro\ListeInitiale[\xcnt,2]\y%
- \DTLnewdbentry{mtdbEEqual}{Eff}{\y}%
- }%
- \DTLforeach{mtdbEEqual}{\Val=Val,\Eff=Eff}{%
- \expandafter\AjoutListEEy\Val\nil%
- \expandafter\AjoutListEEx\Eff\nil%
- }%
- \xdef\listEE{\the\tabtoksEE}
- \ignoreemptyitems%
- \setsepchar[*]{,*/}%
- \readlist*\ListeComplete\listEE%
- }{% Dans le qualitatif, on trie d'abord les valeurs.
- \setsepchar[*]{,*/}\ignoreemptyitems%
- \readlist*\ListeInitiale{#2}%
- % "liste vide"
- \newtoks\tabtoksEE%
- \tabtoksEE{}%
- \DTLcleardb{mtdbEEqual}%
- \foreachitem\x\in\ListeInitiale{%
- \DTLnewrow{mtdbEEqual}%
- \itemtomacro\ListeInitiale[\xcnt,1]\x%
- \DTLnewdbentry{mtdbEEqual}{Val}{\x}%
- \itemtomacro\ListeInitiale[\xcnt,2]\y%
- \DTLnewdbentry{mtdbEEqual}{Eff}{\y}%
- }%
- \dtlsort{Val}{mtdbEEqual}{\dtlicompare}%
- \DTLforeach{mtdbEEqual}{\Val=Val,\Eff=Eff}{%
- \expandafter\AjoutListEEy\Val\nil%
- \expandafter\AjoutListEEx\Eff\nil%
- }%
- \xdef\listEE{\the\tabtoksEE}
- \ignoreemptyitems%
- \setsepchar[*]{,*/}%
- \readlist*\ListeComplete\listEE%
- }}}%
- % on cr\'ee la base de donn\'ees des valeurs dans le cas qualitatif
- \DTLcleardb{mtdb}%
- % on les trie pour la m\'ediane dans le cas qualitatif % Touhami / Texnique.fr
- \foreachitem\x\in\ListeComplete{%
- \DTLnewrow{mtdb}%
- \itemtomacro\ListeComplete[\xcnt,2]\y%
- \DTLnewdbentry{mtdb}{Numeric}{\y}%
- }%
- \dtlsort{Numeric}{mtdb}{\dtlicompare}%
- % % on r\'einitialise les valeurs des crit\`eres de position et de
- % dispersion
- \renewcommand\NbDonnees{}%
- \renewcommand\SommeDonnees{}%
- \renewcommand\EffectifTotal{}%
- \renewcommand\Moyenne{}%
- \renewcommand\Etendue{}%
- \renewcommand\Mediane{}%
- \renewcommand\DonneeMax{0}%
- \renewcommand\EffectifMax{0}%
- \renewcommand\DonneeMin{999999999}%
- \ifboolKV[ClesStat]{Qualitatif}{%D\'ebut qualitatif
- % Calculs
- % %% celui de la somme des donn\'ees
- \foreachitem\don\in\ListeComplete{\xdef\SommeDonnees{\fpeval{\SommeDonnees+\ListeComplete[\doncnt,2]}}}%
- % %% celui de l'effectif total
- \ifboolKV[ClesStat]{EffectifTotal}{%
- \ifboolKV[ClesStat]{Liste}{L'effectif total de la s\'erie est
- \num{\ListeCompletelen}.\par}{%
- \foreachitem\don\in\ListeComplete{\xdef\EffectifTotal{\fpeval{\EffectifTotal+\ListeComplete[\doncnt,2]}}}%
- L'effectif total de la s\'erie est : \[\ListeComplete[1,2]\xintFor* ##1 in
- {\xintSeq {2}{\ListeCompletelen}}\do{%
- +\ListeComplete[##1,2]}=\num{\EffectifTotal}\]}
- }{}%
- \ifboolKV[ClesStat]{Liste}{\xdef\EffectifTotal{\ListeCompletelen}}{\xdef\EffectifTotal{\SommeDonnees}}%
- % %% celui de la moyenne
- \xdef\Moyenne{\fpeval{\SommeDonnees/\ListeCompletelen}}%
- \ifboolKV[ClesStat]{Moyenne}{%
- \ifboolKV[ClesStat]{Liste}{%
- La somme des donn\'ees de la s\'erie est :%
- \xintifboolexpr{\ListeCompletelen<\useKV[ClesStat]{Coupure}}{%
- \[
- \num{\ListeComplete[1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{%
- +\num{\ListeComplete[##1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
- }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}%
- \]}{%
- \[
- \num{\ListeComplete[1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\xintFor* ##1 in {\xintSeq {2}{3}}\do{%
- +\num{\ListeComplete[##1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}}+\dots\xintFor* ##1 in {\xintSeq {\ListeCompletelen-1}{\ListeCompletelen}}\do{%
- +\num{\ListeComplete[##1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
- }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}%
- \]%
- }%
- \ifboolKV[ClesStat]{SET}{}{Le nombre de donn\'ees de la s\'erie est \num{\ListeCompletelen}.\\}%
- Donc la moyenne de la s\'erie est \'egale \`a :%
- \[\frac{\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}}{\num{\ListeCompletelen}}%\IfInteger{\fpeval{round(\fpeval{\SommeDonnees/\ListeCompletelen},\useKV[ClesStat]{Precision})}}{=}{\approx}
- \ifboolKV[ClesStat]{ValeurExacte}{}{%
- \opdiv*{\SommeDonnees}{\ListeCompletelen}{resultatmoy}{restemoy}%
- \opround{resultatmoy}{\useKV[ClesStat]{Precision}}{resultatmoy1}%
- \opcmp{resultatmoy}{resultatmoy1}\ifopeq=\else\approx\fi%
- \num{\fpeval{round(\SommeDonnees/\ListeCompletelen,\useKV[ClesStat]{Precision})}}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}%
- }%
- \]%
- }{Pas de moyenne possible pour une s\'erie de donn\'ees \`a caract\`ere qualitatif.}}{}%
- % % %% celui de l'\'etendue
- \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
- \xintifboolexpr{\ListeComplete[##1,2]>\DonneeMax}{%
- \xdef\DonneeMax{\ListeComplete[##1,2]}%
- }{}%
- \xintifboolexpr{\ListeComplete[##1,2]<\DonneeMin}{%
- \xdef\DonneeMin{\ListeComplete[##1,2]}%
- }{}%
- }%
- \xdef\EffectifMax{\DonneeMax}%
- \xdef\Etendue{\fpeval{\DonneeMax-\DonneeMin}}%
- \ifboolKV[ClesStat]{Etendue}{%
- \ifboolKV[ClesStat]{Liste}{%
- L'\'etendue de la s\'erie est \'egale \`a $\num{\DonneeMax}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}-\num{\DonneeMin}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}=\num{\Etendue}$\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
- }{Pas d'\'etendue possible pour une s\'erie de donn\'ees \`a caract\`ere qualitatif.}}{}%
- % celui de la mediane
- %%% Recuperation de la mediane %%%%%%%%%%%%%%%%%%%%%
- \newcount\Recapmed%
- \newcount\Recapmeda%
- \ifodd\number\ListeCompletelen%odd impair
- \Recapmed=\fpeval{(\ListeCompletelen+1)/2}\relax%
- \else%
- \Recapmed=\fpeval{\ListeCompletelen/2}\relax%
- \Recapmeda=\numexpr\Recapmed+1\relax%
- \fi%
- \newcount\Recapk%
- \Recapk=0%
- \DTLforeach{mtdb}{\numeroDonnee=Numeric}{\Recapk=\numexpr\Recapk+1\relax%
- \ifnum\Recapk=\Recapmed%
- \ifodd\number\ListeCompletelen%
- \xdef\Mediane{\numeroDonnee}%
- \else%
- \xdef\Mediane{\numeroDonnee}%
- \fi%
- \fi%
- \ifnum\Recapk=\Recapmeda%
- \xdef\Mediane{\fpeval{(\Mediane+\numeroDonnee)/2}}%
- \fi%
- }%
- %%%
- \ifboolKV[ClesStat]{Mediane}{%
- \ifboolKV[ClesStat]{Liste}{%
- On range les donn\'ees par ordre croissant :%
- \nbdonnees=0%
- \xintifboolexpr{\ListeCompletelen<\useKV[ClesStat]{Coupure}}{%
- \[\DTLforeach{mtdb}{\numeroDonnee=Numeric}{\num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\DTLiflastrow{.}{;}}\]%
- }{%
- \medskip%
- \begin{center}
- \begin{minipage}{0.9\linewidth}
- \DTLforeach*{mtdb}{\numeroDonnee=Numeric}{\num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\DTLiflastrow{.}{;
- }\nbdonnees=\fpeval{\nbdonnees+1}\modulo{\nbdonnees}{\useKV[ClesStat]{Coupure}}\xintifboolexpr{\remainder==0}{\\}{}}
- \end{minipage}
- \end{center}%
- \medskip%
- }%
- \newcount\med%
- \newcount\meda%
- \ifodd\number\ListeCompletelen%odd impair
- \med=\fpeval{(\ListeCompletelen+1)/2}\relax%
- L'effectif total de la s\'erie est \num{\ListeCompletelen}. Or, $\num{\ListeCompletelen}=\num{\fpeval{\med-1}}+1+\num{\fpeval{\med-1}}$.\\
- \else% pair
- \med=\fpeval{\ListeCompletelen/2}\relax%
- \meda=\numexpr\med+1\relax%
- L'effectif total de la s\'erie est \num{\ListeCompletelen}. Or, $\num{\ListeCompletelen}=\num{\the\med}+\num{\the\med}$.\\
- \fi%
- \newcount\k%
- \k=0%
- \DTLforeach{mtdb}{\numeroDonnee=Numeric}{\k=\numexpr\k+1\relax%
- \ifnum\k=\med %La m\'ediane vaut \numeroDonnee\fi
- \ifodd\number\ListeCompletelen%
- La m\'ediane de la s\'erie est la \the\med\ieme{} donn\'ee.\\Donc la m\'ediane de la s\'erie est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
- \xdef\Mediane{\numeroDonnee}%
- \else%
- La \the\med\ieme{} donn\'ee est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}. }{. }\xdef\Mediane{\numeroDonnee}%
- \fi%
- \fi%
- \ifnum\k=\meda
- La \the\meda\ieme{} donn\'ee est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}\\Donc \PfCArticleMediane{} m\'ediane de la s\'erie est \xdef\Mediane{\fpeval{(\Mediane+\numeroDonnee)/2}}$\ifboolKV[ClesStat]{DetailsMediane}{\dfrac{\num{\Mediane}+\num{\numeroDonnee}}{2}=}{}\num{\Mediane}$\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
- \fi%
- }%
- %%%%%%%
- }{Pas de m\'ediane possible pour une s\'erie de donn\'ees \`a caract\`ere qualitatif.}}{}
- %%% Quartile un
- \newcount\PfCQuartileUn%
- \modulo{\ListeCompletelen}{4}\relax%
- \ifnum\remainder=0%
- \PfCQuartileUn=\fpeval{\ListeCompletelen/4}%
- \else%
- \PfCQuartileUn=\fpeval{ceil(\ListeCompletelen/4)}%
- \fi%
- \newcount\PfCQunk%
- \PfCQunk=0%
- \DTLforeach{mtdb}{\numeroDonnee=Numeric}{\PfCQunk=\numexpr\PfCQunk+1\relax%
- \ifnum\PfCQunk=\PfCQuartileUn%
- \xdef\QuartileUn{\numeroDonnee}%
- \fi%
- }%
- %%% Quartile trois
- \newcount\PfCQuartileTrois%
- \modulo{\ListeCompletelen}{4}\relax%
- \ifnum\remainder=0%
- \PfCQuartileTrois=\fpeval{3*\ListeCompletelen/4}%
- \else%
- \PfCQuartileTrois=\fpeval{ceil(3*\ListeCompletelen/4)}%
- \fi%
- \newcount\PfCQtroisk%
- \PfCQtroisk=0%
- \DTLforeach{mtdb}{\numeroDonnee=Numeric}{\PfCQtroisk=\numexpr\PfCQtroisk+1\relax%
- \ifnum\PfCQtroisk=\PfCQuartileTrois%La m\'ediane vaut \numeroDonnee\fi
- \xdef\QuartileTrois{\numeroDonnee}%
- \fi%
- }%
- % Construction du tableau
- \ifboolKV[ClesStat]{Tableau}{%
- \ifboolKV[ClesStat]{Liste}{Pas de tableau possible avec la cl\'e Liste.\\Utilisez plut\^ot la cl\'e Sondage si vous voulez un tableau avec cette liste.}{\BuildtabStat}}{}%
- % Construction du graphique
- \ifboolKV[ClesStat]{Graphique}{%
- \ifboolKV[ClesStat]{Liste}{Pas de graphique possible avec la cl\'e Liste.\\Utilisez plut\^ot la cl\'e Sondage si vous voulez un graphique avec cette liste.}{%
- \ifboolKV[ClesStat]{Barre}{%
- \buildgraphbarhor%
- }{%
- \ifboolKV[ClesStat]{Angle}{%
- \buildgraphcq{360}%
- }{%
- \ifboolKV[ClesStat]{SemiAngle}{%
- \buildgraphcq{180}%
- }{%
- \buildgraphq[#1]%
- }%
- }%
- }%
- }%
- }{}%
- }{%%%%%%%%%%%%%%%%%%%%%D\'ebut quantitatif
- % % on effectue les calculs
- % %% celui de la somme des donn\'ees
- \foreachitem\don\in\ListeComplete{\xdef\SommeDonnees{\fpeval{\SommeDonnees+\ListeComplete[\doncnt,1]*\ListeComplete[\doncnt,2]}}}%
- % %% celui de l'effectif total
- \foreachitem\don\in\ListeComplete{\xdef\EffectifTotal{\fpeval{\EffectifTotal+\ListeComplete[\doncnt,2]}}}%
- % %% celui de l'\'etendue
- \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
- \xintifboolexpr{\ListeComplete[##1,1]>\DonneeMax}{%
- \xdef\DonneeMax{\ListeComplete[##1,1]}%
- }{}%
- \xintifboolexpr{\ListeComplete[##1,1]<\DonneeMin}{%
- \xdef\DonneeMin{\ListeComplete[##1,1]}%
- }{}%
- }%
- % \xdef\EffectifMax{\DonneeMax}%
- \xdef\Etendue{\fpeval{\DonneeMax-\DonneeMin}}%%
- % %% celui de la moyenne
- \xdef\Moyenne{\fpeval{\SommeDonnees/\EffectifTotal}}%
- \ifboolKV[ClesStat]{EffectifTotal}{%
- L'effectif total de la s\'erie est : \[\ListeComplete[1,2]\xintFor* ##1 in
- {\xintSeq {2}{\ListeCompletelen}}\do{%
- +\ListeComplete[##1,2]}=\num{\EffectifTotal}\]
- }{}%
- \ifboolKV[ClesStat]{Moyenne}{%
- La somme des donn\'ees de la s\'erie est :%
- \xintifboolexpr{\ListeCompletelen<\useKV[ClesStat]{Coupure}}{%
- \[
- \ifnum\ListeComplete[1,2]=1\else\num{\ListeComplete[1,2]}\times\fi\num{\ListeComplete[1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{%
- +\ifnum\ListeComplete[##1,2]=1\else\num{\ListeComplete[##1,2]}\times\fi\num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
- }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
- \]
- }{%
- \[
- \ifnum\ListeComplete[1,2]=1\else\num{\ListeComplete[1,2]}\times\fi\num{\ListeComplete[1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\xintFor* ##1 in {\xintSeq {2}{2}}\do{%
- +\ifnum\ListeComplete[##1,2]=1\else\num{\ListeComplete[##1,2]}\times\fi\num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
- }+\dots\xintFor* ##1 in {\xintSeq {\ListeCompletelen-1}{\ListeCompletelen}}\do{%
- +\ifnum\ListeComplete[##1,2]=1\else\num{\ListeComplete[##1,2]}\times\fi\num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
- }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
- \]
- }%
- \ifboolKV[ClesStat]{SET}{}{L'effectif total de la s\'erie est :%
- \ifboolKV[ClesStat]{Liste}{ \num{\EffectifTotal}\\}{%
- \[\num{\ListeComplete[1,2]}\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{%
- +\num{\ListeComplete[##1,2]}
- }=\num{\EffectifTotal}
- \]%
- }%
- }%
- Donc la moyenne de la s\'erie est \'egale \`a :%
- \[\frac{\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}}{\num{\EffectifTotal}}%
- \ifboolKV[ClesStat]{ValeurExacte}{}{%
- \opdiv*{\SommeDonnees}{\EffectifTotal}{resultatmoy}{restemoy}%
- \opround{resultatmoy}{\useKV[ClesStat]{Precision}}{resultatmoy1}%
- \opcmp{resultatmoy}{resultatmoy1}\ifopeq=\else\approx\fi%
- \num{\fpeval{round(\SommeDonnees/\EffectifTotal,\useKV[ClesStat]{Precision})}}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}%
- }%
- \]%
- }{}%
- % % Affichage des r\'eponses.
- % %% pour l'\'etendue
- \ifboolKV[ClesStat]{Etendue}{L'\'etendue de la s\'erie est \'egale \`a $\num{\ListeComplete[\ListeCompletelen,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}-\num{\ListeComplete[1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}=\num{\Etendue}$\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}}{}%
- % pour la m\'ediane
- %%% Recuperation Mediane
- \newcount\Recupmed%
- \newcount\Recupmeda%
- \ifodd\number\EffectifTotal%odd impair
- \Recupmed=\fpeval{(\EffectifTotal+1)/2}\relax%
- \else% pair
- \Recupmed=\fpeval{\EffectifTotal/2}\relax%
- \Recupmeda=\numexpr\Recupmed+1\relax%
- \fi%
- \newcount\Recupk%
- \Recupk=0%
- \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
- \xintFor* ##2 in {\xintSeq {1}{\ListeComplete[##1,2]}}\do{%
- \Recupk=\numexpr\Recupk+1\relax%
- \ifnum\Recupk=\Recupmed%
- \ifodd\number\EffectifTotal%
- \xdef\Mediane{\ListeComplete[##1,1]}%
- \else%
- \xdef\Mediane{\ListeComplete[##1,1]}%
- \fi%
- \fi%
- \ifnum\Recupk=\Recupmeda%
- \xdef\Mediane{\fpeval{(\Mediane+\ListeComplete[##1,1])/2}}%
- \fi%
- }%
- }%
- %%%
- \ifboolKV[ClesStat]{Mediane}{%
-
- \newcount\med%
- \newcount\meda%
- \ifodd\number\EffectifTotal%odd impair
- \med=\fpeval{(\EffectifTotal+1)/2}\relax%
- L'effectif total de la s\'erie est \num{\EffectifTotal}. Or, $\num{\EffectifTotal}=\num{\fpeval{\med-1}}+1+\num{\fpeval{\med-1}}$. %
- \else% pair
- \med=\fpeval{\EffectifTotal/2}\relax%
- \meda=\numexpr\med+1\relax%
- L'effectif total de la s\'erie est \num{\EffectifTotal}. Or, $\num{\EffectifTotal}=\num{\fpeval{\med}}+\num{\fpeval{\med}}$. %
- \fi%
- \newcount\k%
- \k=0%
- \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
- \xintFor* ##2 in {\xintSeq {1}{\ListeComplete[##1,2]}}\do{%
- \k=\numexpr\k+1\relax%
- \ifnum\k=\med%
- \ifodd\number\EffectifTotal%
- La m\'ediane de la s\'erie est la \the\med\ieme{} donn\'ee. Donc la m\'ediane de la s\'erie est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
- \else%
- La \the\med\ieme{} donn\'ee est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}. }{. }\xdef\Mediane{\ListeComplete[##1,1]}%
- \fi%
- \fi%
- \ifnum\k=\meda%
- La \the\meda\ieme{} donn\'ee est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}\\Donc \PfCArticleMediane{} m\'ediane de la s\'erie est $\ifboolKV[ClesStat]{DetailsMediane}{\dfrac{\num{\Mediane}+\num{\ListeComplete[##1,1]}}2=}{}\xdef\Mediane{\fpeval{(\Mediane+\ListeComplete[##1,1])/2}}\num{\Mediane}$\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
- \fi%
- }%
- }%
- }{}%
- %%% Quartile un
- \newcount\PfCQuartileUn%
- \modulo{\EffectifTotal}{4}\relax%
- \ifnum\remainder=0%
- \PfCQuartileUn=\fpeval{\EffectifTotal/4}%
- \else%
- \PfCQuartileUn=\fpeval{ceil(\EffectifTotal/4)}%
- \fi%
- \newcount\PfCQunk%
- \PfCQunk=0%
- \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
- \xintFor* ##2 in {\xintSeq {1}{\ListeComplete[##1,2]}}\do{%
- \PfCQunk=\numexpr\PfCQunk+1\relax%
- \ifnum\PfCQunk=\PfCQuartileUn%
- \xdef\QuartileUn{\ListeComplete[##1,1]}%
- \fi%
- }%
- }%
- %%% Quartile trois
- \newcount\PfCQuartileTrois%
- \modulo{\EffectifTotal}{4}\relax%
- \ifnum\remainder=0%
- \PfCQuartileTrois=\fpeval{3*\EffectifTotal/4}%
- \else%
- \PfCQuartileTrois=\fpeval{ceil(3*\EffectifTotal/4)}%
- \fi%
- \newcount\PfCQtroisk%
- \PfCQtroisk=0%
- \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
- \xintFor* ##2 in {\xintSeq {1}{\ListeComplete[##1,2]}}\do{%
- \PfCQtroisk=\numexpr\PfCQtroisk+1\relax%
- \ifnum\PfCQtroisk=\PfCQuartileTrois%
- \xdef\QuartileTrois{\ListeComplete[##1,1]}%
- \fi%
- }%
- }%
- % Construction de tableau
- \ifboolKV[ClesStat]{Tableau}{\BuildtabStat}{}%
- % Construction du graphique ??
- \ifboolKV[ClesStat]{Graphique}{%
- \ifboolKV[ClesStat]{Angle}{%
- \buildgraphcq{360}%
- }{%
- \ifboolKV[ClesStat]{SemiAngle}{%
- \buildgraphcq{180}%
- }{%
- \buildgraph[#1]%
- }%
- }%
- }{}%
- }%
- }%
- }%
-}% \ No newline at end of file