Macros pour statistiques

Pour proposer des idées, ou simplement discuter

Macros pour statistiques

Messagepar P.Fradin » 13 Fév 2011 13:39

J'ouvre un fil pour débattre sur l'élaboration d'un fichier de macros dédiées aux représentations de statistiques.
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1835
Inscription: 29 Oct 2008 15:04

Re: Macros pour statistiques

Messagepar Joffrey » 13 Fév 2011 18:03

Re,
je reprends les deux dernières macros que j'ai postées ce matin et je les repropose avec la nouvelle syntaxe :
-> DrawDiagCirc
Code: Tout sélectionner
[
{DrawDiagCirc = DrawDiagCirc([valeurs],[centre, rayon])}
$L:=%1,
if %2=Nil then
           $centre:=0,
           $r:=3
else $centre:=%2[1],
     $r:=%2[2],
fi,
$ColorList:=[purple, blue,  green,  yellow, orange,  red, crimson],
Langle:=[for $k in L do k*360/sum(L) od],
for $j from 1 to Nops(L)-1 do
    for $k from j+1 to Nops(L) do
        replace(Langle,k,Langle[k]+L[j]*360/sum(L))
    od,
od,
Insert(Langle,0,1),
for k from 1 to Nops(Langle)-1 do
ColorAngle:=mod(k,7),
$c:=ColorList[ColorAngle],
draw("path", [centre+r*exp(i*pi*Langle[k]/180), centre,
              centre+r*exp(i*pi*Langle[k+1]/180), r, arc,
              centre+r*exp(i*pi*Langle[k+1]/180), centre,
              centre+r*exp(i*pi*Langle[k]/180), line,closepath],
              [FillStyle:=full, FillColor:=ColorList[ColorAngle]]),
od,
]

qui s'utlise avec la commande draw("DiagCirc",[valeurs],[options])
    valeurs est une liste de nombres réels ;
    les options sont pour l'instant au nombre de deux, le centre et le rayon du diagramme

-> DrawDiagSemiCirc
Code: Tout sélectionner
[
{DrawSemiDiagCirc = DrawDiagSemiCirc([valeurs],[centre, rayon])}
$L:=%1,
if %2=Nil then
           $centre:=0,
           $r:=3
else $centre:=%2[1],
     $r:=%2[2],
fi,
$ColorList:=[purple, blue,  green,  yellow, orange,  red, crimson],
Langle:=[for $k in L do k*180/sum(L) od],
for $j from 1 to Nops(L)-1 do
    for $k from j+1 to Nops(L) do
        replace(Langle,k,Langle[k]+L[j]*180/sum(L))
    od,
od,
Insert(Langle,0,1),
for k from 1 to Nops(Langle)-1 do
ColorAngle:=mod(k,7),
$c:=ColorList[ColorAngle],
draw("path", [centre+r*exp(i*pi*Langle[k]/180), centre,
              centre+r*exp(i*pi*Langle[k+1]/180), r, arc,
              centre+r*exp(i*pi*Langle[k+1]/180), centre,
              centre+r*exp(i*pi*Langle[k]/180), line,closepath],
              [FillStyle:=full, FillColor:=ColorList[ColorAngle]]),
od,
]


qui s'utlise avec la commande draw("DiagSemiCirc",[valeurs],[options])
    valeurs est une liste de nombres réels ;
    les options sont pour l'instant au nombre de deux, le centre et le rayon du diagramme

A suivre ....
L'homme en noir fuyait à travers le désert, et le Pistoléro le suivait ...
Joffrey
 
Messages: 285
Inscription: 16 Juil 2009 17:05
Localisation: Vichy

Re: Macros pour statistiques

Messagepar P.Fradin » 13 Fév 2011 22:47

Je propose cette modification de la première macro DrawDiagCirc:

Code: Tout sélectionner
[
    {DrawDiagCirc( <valeurs>,[ options ])}
    centre:=0, rayon:=3,  palette:=[purple,blue,green,yellow,orange,red,crimson],
    SaveAttr(), $options:=%2, $L:=%1, $total:=0,
    Langle:=for $k in L do Inc(total,k), total+i*k od,
    Sort(L), $min:=L[1], $max:=L[-1], $first:=0,
    for $z in Langle do
     $k:=2*pi*Re(z)/total,
     ColorAngle:=Palette( palette, (Im(z)-min)/(max-min)),
     draw("path", [centre+exp(i*first), centre, centre+exp(i*k), rayon, arc,
                             centre, line,closepath],
                           [%2, FillColor:=ColorAngle, LineStyle:=noline]),
     draw("line",[centre,centre+rayon*exp(i*first)],[%2]),
     first:=k,
    od,
    draw("path", [rayon,centre,circle],[FillStyle:=none]),
    RestoreAttr()
    ]


Les options sont de la forme option := valeur, les options seront obligatoirement des variables globales du fichier de macros. J'ai mis comme options pour l'instant: centre, rayon et palette. J'ai essayé de réduire le nombre de calculs (un seul parcourt de liste à chaque fois), la macro Palette est utilisée, et chaque trait est dessiné une seule fois.

Exemple:
Code: Tout sélectionner
[
    view(-3.5,3.5,-3.5,3.5), Marges(0,0,0,0), size(9),
    DrawDiagCirc([2,1,11,5], [FillStyle:=full, Width:=8])
]

diagCircul.png
diagCircul.png (12.51 Kio) Consulté 5787 fois


Reste le problème des légendes: je pense qu'il faut remplacer la liste de valeurs par une liste de chaines du type valeur, "legende", valeur, "legende", ..., et réfléchir à des options pour paramétrer la position des légendes.
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1835
Inscription: 29 Oct 2008 15:04

Re: Macros pour statistiques

Messagepar P.Fradin » 13 Fév 2011 23:18

Avec légendes, le premier argument est alors une liste du type valeur, "légende", ...:

Code: Tout sélectionner
[
    {DrawDiagCirc( <valeurs>,[ options ])}
    centre:=0, rayon:=3,
    palette:=[purple,blue,green,yellow,orange,red,crimson],
    SaveAttr(), $options:=%2, StrListCopy(%1,templist),
    $L:=for k from 1 to templist(0) do Eval(@templist(k)) od,
    Langle:=for $k in L do Inc(total,k), total+i*k od,
    Sort(L), $min:=L[1], $max:=L[-1], $first:=0, $index:=0,
    for $z in Langle do
     $k:=2*pi*Re(z)/total, Inc(index,2),
     ColorAngle:=Palette( palette, (Im(z)-min)/(max-min)),
     draw("path", [centre+exp(i*first), centre, centre+exp(i*k), rayon, arc,
                   centre, line,closepath],
                  [%2, FillColor:=ColorAngle, LineStyle:=noline]),
     draw("line",[centre,centre+rayon*exp(i*first)],[%2]),
     draw("label", @templist(index),
       [anchor:=centre+(rayon+0.5)*exp(i*(k+first)/2), Color:=ColorAngle]),
     first:=k,
    od,
    draw("path", [rayon,centre,circle],[FillStyle:=none]),
    RestoreAttr(), StrListKill(templist)
    ]


Exemple d'utilisation, on créée d'abord la liste de chaines (appelée serie1 dans l'exemple):
Code: Tout sélectionner
[
    view(-4,4,-4,4), Marges(0,0,0,0), size(9),
    StrListInit(serie1, 2,"Janvier",1,"Février",11,"Mars",5,"Avril"),
    DrawDiagCirc( serie1, [FillStyle:=full, Width:=8])
]

diagCircul2.png
diagCircul2.png (13.55 Kio) Consulté 5778 fois
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1835
Inscription: 29 Oct 2008 15:04


Revenir vers Propositions - Discussions

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 5 invités

cron