Wie kann ich die Bin-Breite in Verteilungen basierend auf dem Datenbereich selbst automatisch anpassen?Wenn ich die Verteilungsplattform verwende, ist die Bin-Breite standardmäßig immer groß und trägt nicht dazu bei, ein gutes Verständnis der Verteilung zu erlangen. Die Daten, die ich verarbeiten muss, variieren in der Größenordnung von Maginuten (Mega, Mili, Einheit usw.), daher funktioniert ein fester Behälter für alle Histogramme nicht. Auch im realen Fall, den ich verarbeiten muss, habe ich Hunderte von Tests, sodass es auch nicht möglich ist, die Diagramme einzeln anzupassen. Gibt es eine Möglichkeit, die Bin-Breite für jedes einzelne Diagramm durch den Datenbereich zu bestimmen? Ich möchte zum Beispiel einfach den Bereich nehmen und ihn in 100 gleiche Teile oder 50 usw. teilen, sodass unabhängig von der Einheit das Erscheinungsbild über alle Parzellen hinweg einigermaßen einheitlich wäre, ohne sie einzeln anpassen zu müssen. Im Anhang finden Sie drei Beispiele für Diagramme, bei denen ich mir gewünscht hätte, dass die Bin-Breite standardmäßig auf etwa 1/100 des Datenbereichs eingestellt wäre.
Danke!
Datenexploration und -visualisierungBetreff: Wie kann ich die Bin-Breite in Verteilungen basierend auf dem Datenbereich selbst automatisch anpassen?Ich konnte die Bin festlegen, indem ich einen Teil des oben bereitgestellten Codes und Eval/Parse-Ausdrücke verwendete.
Danke.
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 ) );Betreff: Wie kann ich die Bin-Breite in Verteilungen basierend auf dem Datenbereich selbst automatisch anpassen?Danke @ron_horne Und @jthi für die Codeausschnitte. Ich werde es mit ihnen versuchen.
Betreff: Wie kann ich die Bin-Breite in Verteilungen basierend auf dem Datenbereich selbst automatisch anpassen?Höchstwahrscheinlich eine Verbesserung gegenüber meinem vorherigen Code mit Set Bin Width() von @ron_horne .
Das Schleifen kann höchstwahrscheinlich auf cleverere Weise erfolgen:
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);
);Betreff: Wie kann ich die Bin-Breite in Verteilungen basierend auf dem Datenbereich selbst automatisch anpassen?Hallo @breino
Wie wäre es damit als Grundlage für die Entwicklung:
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 ) )
);
Betreff: Wie kann ich die Bin-Breite in Verteilungen basierend auf dem Datenbereich selbst automatisch anpassen?Sie könnten versuchen, es per Skript zu erstellen.
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);
);Es gibt auch Bin Span(), aber ich bin mir nicht sicher, ob es geändert werden kann, nachdem die Distribution erstellt wurde.
Betreff: Wie kann ich die Bin-Breite in Verteilungen basierend auf dem Datenbereich selbst automatisch anpassen?Hallo Ron:
Vielen Dank für den Vorschlag. Leider mag es keine große Anzahl von Tests. Ich habe versucht, etwa 30 Tests zum Plotten hinzuzufügen, und es kommt die Fehlermeldung „Element kann nicht hinzugefügt werden: Liste enthält bereits die maximale Anzahl von Elementen.“
Ich hatte gehofft, dass es eine allgemeine Einstellung zum Anpassen der Bin-Breite gibt, da die meisten Verteilungen mit breiten Balken ausgegeben werden, sodass es irgendwo eine globale Einstellung geben muss, wie man bestimmt, wie breit sie sind.
Betreff: Wie kann ich die Bin-Breite in Verteilungen basierend auf dem Datenbereich selbst automatisch anpassen?Hallo @breino ,
Fang hier an:
https://community.jmp.com/t5/JMP-Add-Ins/2D-Histograms/ta-p/377945
Lassen Sie uns wissen, ob es hilft.