Comment puis-je ajuster automatiquement la largeur des cases dans les distributions en fonction de la plage de données elle-même ?Lorsque j'utilise la plateforme de distribution, par défaut les largeurs de bin sont toujours grandes et n'aident pas à bien comprendre la distribution. Les données que je dois traiter varient en ordres de maginutes (méga, mili, unité, etc.) donc un bac fixe avec pour tous les histogrammes ne fonctionne pas. De plus, dans le cas réel que je dois traiter, j'ai des centaines de tests, il n'est donc pas non plus possible d'ajuster les tracés un par un. Existe-t-il un moyen de déterminer la largeur du groupe de chaque parcelle individuelle en fonction de la plage de données ? Par exemple, je voudrais simplement saisir la plage et la diviser en 100 parties égales ou 50, etc. afin que, quelle que soit l'unité, l'apparence soit quelque peu uniforme sur toutes les parcelles sans avoir à les ajuster individuellement. Vous trouverez ci-joint 3 exemples de tracés pour lesquels je souhaite que la largeur par défaut soit définie comme peut-être 1/100 de la plage de données.
Merci!
Exploration et visualisation des donnéesRe : Comment puis-je ajuster automatiquement la largeur des cases dans les distributions en fonction de la plage de données elle-même ?J'ai pu définir le bac en utilisant une partie du code fourni ci-dessus et en utilisant les expressions Eval/Parse.
Merci.
dt = currentdatatable();
col = dt << get column names();
nc = N Items( col );
colList = {};
bin_width={};
For( i = 1, i <= nc, i++,
If(Contains (col[i],"::"),
Insert Into( colList, col[i] ))
);
For(i = 1, i <= N Items(colList), i++,
Insert Into(bin_width,0.0);
bin_width[i] = Col Max(Column(dt, colList[i])) - Col Min(Column(dt, colList[i]));
bin_width[i] = bin_width[i]/10;
);
theExpr = "dis = dt << Distribution(Stack( 1 ),
Continuous Distribution( column( column(dt,colList[1])), Set Bin Width(bin_width[1]), Label Row( Label Orientation( \!"Perpendicular\!" ) ))
";
For( i = 2, i < N Items( colList ), i++,
theExpr = theExpr || ", Continuous Distribution( column( column(dt, colList[" || Char( i ) || "])), Set Bin Width(bin_width[i]))"
);
theExpr = theExpr || ");";
Eval( Parse( theExpr ) );Re : Comment puis-je ajuster automatiquement la largeur des cases dans les distributions en fonction de la plage de données elle-même ?Merci @ron_horne et @jthi pour les extraits de code. Je vais les essayer.
Re : Comment puis-je ajuster automatiquement la largeur des cases dans les distributions en fonction de la plage de données elle-même ?Très probablement une amélioration de mon code précédent avec Set Bin width() de @ron_horne .
Le bouclage peut probablement être réalisé de manière plus intelligente :
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Students.jmp");
colList = {"height", "weight"};
dist = dt << Distribution(
Continuous Distribution(Column(:height)),
Continuous Distribution(Column(:weight))
);
wait(1);
For(i = 1, i <= N Items(colList), i++,
newInc = Col Max(Column(dt, colList[i])) - Col Min(Column(dt, colList[i]));
newInc = newInc/10;
dist[i] << Set Bin Width(newInc);
);Re : Comment puis-je ajuster automatiquement la largeur des cases dans les distributions en fonction de la plage de données elle-même ?Salut @breino
que diriez-vous de ceci comme base de développement :
Open( "$SAMPLE_DATA/Big Class.jmp" );
Distribution(
Continuous Distribution( Column( :height ), Set Bin Width( (colmax(:height)-colmin(:height))/50 ) ),
Continuous Distribution( Column( :weight ), Set Bin Width( (colmax(:weight)-colmin(:weight))/100 ) )
);
Re : Comment puis-je ajuster automatiquement la largeur des cases dans les distributions en fonction de la plage de données elle-même ?Vous pouvez essayer de le scripter.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Students.jmp");
colList = {"height", "weight"};
dist = dt << Distribution(
Continuous Distribution(Column(:height)),
Continuous Distribution(Column(:weight))
);
wait(2);
rep_layer = Report(dist);
axisbox = rep_layer[axis box(1)];
For Each({val}, colList,
//some calculation for inc
newInc = Col Max(Column(dt, val)) - Col Min(Column(dt, val));
newInc = newInc/10;
cur_rep = rep_layer[OutlineBox(val)];
axisbox = cur_rep[axis box(1)];
axisbox << Inc(newInc);
);Il existe également Bin Span() mais je ne sais pas s'il peut être modifié une fois la distribution construite.
Re : Comment puis-je ajuster automatiquement la largeur des cases dans les distributions en fonction de la plage de données elle-même ?Bonjour Ron :
Merci pour la suggestion. Malheureusement, il n'aime pas un grand nombre de tests, j'ai essayé d'ajouter environ 30 tests à tracer et j'ai généré une erreur "Impossible d'ajouter un élément : la liste contient déjà le nombre maximum d'éléments".
J'espérais qu'il y avait un paramètre général pour ajuster la largeur du bac, car la plupart des distributions comportent des barres larges, ce qui doit donc être un paramètre global quelque part sur la façon de déterminer leur largeur.
Re : Comment puis-je ajuster automatiquement la largeur des cases dans les distributions en fonction de la plage de données elle-même ?Salut @breino ,
commencer ici:
https://community.jmp.com/t5/JMP-Add-Ins/2D-Histograms/ta-p/377945
faites-nous savoir si cela aide.