So zeichnen Sie ein Diagramm mit Referenzlinien für jedes Element der TabellenzusammenfassungHallo alle,
Ich versuche, Diagramme (Skript, JMP 13) mit Referenzlinien für jedes Element meiner Tabellenzusammenfassung zu zeichnen (Diagramm der Punktzahl vs. # Versuchen Sie es für jeden Namen + Note und fügen Sie dann die Referenzlinie des 25. und 75. Perzentils der Punktzahl auf der X-Achse hinzu.) . Würde mich über jeden Kommentar freuen
| Name | Grad | Punktzahl | # versuchen |
| Name1 | A | 80 | 2 |
| Name1 | A | 82 | 3 |
| Name1 | B | 98 | 3 |
| Name1 | C | 86 | 2 |
| Name2 | A | 88 | 3 |
| Name3 | A | 90 | 2 |
| Name3 | A | 88 | 1 |
| Name3 | A | 94 | 3 |
| Name4 | B | 96 | 2 |
| Name4 | B | 82 | 4 |
| Name4 | A | 100 | 1 |
| Name4 | C | 92 | 2 |
| Name5 | A | 84 | 3 |
Betreff: So zeichnen Sie ein Diagramm mit Referenzlinien für jedes Element der TabellenzusammenfassungHallo @spinup ,
Ich glaube, ich verstehe, was Sie wollen. Aber ich bin auch etwas verwirrt: Möchten Sie die 9 separaten bivariaten Diagramme zusammenfassen oder einfach nur grafisch darstellen?
Wenn Sie eine bivariate Anpassung durchführen, können Sie ganz einfach alle 9 Diagramme erstellen, indem Sie Ihre ursprüngliche Datentabelle verwenden, z. B.:
Bivariate(
Y( :Score ), X( :Name( "# try" ) ),
By( :Name, :Grade )
);
Dadurch werden Ihre neun Diagramme generiert, die Sie in Ihrem vorherigen Beitrag eingefärbt haben.
Dann müssen Sie wahrscheinlich eine oder mehrere For-Schleifen verwenden, um die Quantillinien (oder den schattierten Bereich) zu generieren.
Das Skript für das erste Diagramm würde etwa so aussehen:
Bivariate(
Y( :Score ),
X( :Name( "# try" ) ),
Where( :Name == "name1" & :Grade == "A" ), // this would be selecting
SendToReport(
Dispatch(
{},
"2",
ScaleBox,
{Min( 75 ), Max( 100 ), Inc( 5 ), Minor Ticks( 1 ), // this sets the appearance of the y-axis
Add Ref Line( 83, "Solid", "Blue", "25th quantile", 1 ),
Add Ref Line( 95, "Solid", "Blue", "75th quantile", 1 )}
)
)
);Wenn Sie tatsächlich eine Liste mit den Namen NameList={"Name1", "Name2"...} einrichten oder sie aus den Spaltenelementen ziehen, können Sie ein sehr kurzes Skript erstellen, indem Sie For-Schleifen einfügen und einfach Wir verweisen auf das NameList[i]-Element. Dies wäre auch für Where(:Name==NameList[i] & Grade == GradeList[i]) der Fall.
Eine andere Möglichkeit wäre, die Baumstruktur der Ausgabe des ersten Skripts, das ich oben eingefügt habe, zu untersuchen und dann die AxisBox(i) für jede der y-Achsen für die 9 Diagramme zu referenzieren. Die y-Achsen sind alle ungerade. Wenn Sie also eine For-Schleife ausführen, müssen Sie i++ ausführen, damit in der Schleife von 1 über 3 bis 5 usw. iteriert wird.
Der Link enthält einige wirklich gute Sachen @Craige_Hales bereitgestellt.
Für Ihr spezielles Problem müssen Sie meiner Meinung nach auf jeden Fall eine Schleife durchführen. Entweder das, oder Sie können das Ganze einmal manuell durchführen und dann das Skript einfach in der Datentabelle speichern (wahrscheinlich als Gruppe), und dann können Sie es kopieren/einfügen und als separate JSL-Datei in einem neuen Skriptfenster speichern. Wenn Sie herausfinden, wie das manuell geht, schreibt JMP die JSL für Sie, und Sie müssen nur noch alles in einer Master-JSL-Datei zusammenfassen, die alles für Sie erledigt. Das einzige Problem besteht darin, dass Sie Namen, Spaltenverweise oder ähnliches ändern möchten. Wenn Sie dies tun, müssen Sie mit der Verwendung lokaler Variablen beginnen.
Hoffe das hilft!,
DS
Betreff: So zeichnen Sie ein Diagramm mit Referenzlinien für jedes Element der TabellenzusammenfassungVielleicht so etwas
dtBigClass = Open( "$sample_data/big class.jmp" );
dtage = dtBigClass << Summary( Group( :age ) ); // makes a small table of unique ages
ages = dtage[0, 1]; // [12, 13, 14, 15, 16, 17]
Close( dtage, "nosave" ); // table no longer needed
grid = Lineup Box( N Col( 3 ), spacing( 20, 30 ) ); // Horz,Vert extra space between graphs in pixels
For( iAge = 1, iAge <= N Rows( ages ), iAge += 1, // for each age...
dtBigClass << selectwhere( age == ages[iAge] );
dtSubset = dtBigClass << subset( selectedrows( 1 ), linked( 1 ), "invisible" );
// the summary will be a single row with the requested information
dtSummary = dtSubset << Summary( Mean( :height ), Mean( :weight ), Std Dev( :height ), Std Dev( :weight ), Freq( "None" ), Weight( "None" ) );
// grab the values of interest in simpler variable names
heightMean = dtSummary:name( "Mean(height)" )[1]; // row one has the answers
heightStdDev = dtSummary:name( "Std Dev(height)" )[1];
weightMean = dtSummary:name( "Mean(weight)" )[1];
weightStdDev = dtSummary:name( "Std Dev(weight)" )[1];
Close( dtSummary, "nosave" ); // close the work table, no longer needed
// make a graph, attach to a borderbox so it does not open in a window...
bb = Border Box(
dtSubset << Graph Builder(
Size( 400, 300 ),
Show Control Panel( 0 ),
Show Legend( 0 ), // don't need a legend
Variables( X( :height ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 5 ) ) ),
// add ref lines. You can get a script like this GraphBuilder script by
// making a graph builder interactively, then using the red triangle->get script.
// below, the numbers in the script have been replaced with the variables above.
SendToReport(
Dispatch(
{},
"height",
ScaleBox,
{Add Ref Line( heightMean, "Dotted", "Red", "", 2 ), Add Ref Line( heightMean + heightStdDev, "Dotted", "Blue", "", 2 ),
Add Ref Line( heightMean - heightStdDev, "Dotted", "Blue", "", 2 ),
// force all axes to be the same...
Min( 48.2828947368421 ), Max( 75.8776488919668 ), Inc( 5 ), Minor Ticks( 1 )}
),
Dispatch(
{},
"weight",
ScaleBox,
{Add Ref Line( weightMean, "Dotted", "Red", "", 2 ), Add Ref Line( weightMean + weightStdDev, "Dotted", "Blue", "", 2 ),
Add Ref Line( weightMean - weightStdDev, "Dotted", "Blue", "", 2 ),
// force all axes to be the same...
Min( 55.2100840336134 ), Max( 188.127074359155 ), Inc( 20 ), Minor Ticks( 0 )}
),
Dispatch( {}, "Graph Builder", FrameBox, {Marker Size( 6 ), Transparency( 1 )} ), // make the markers bigger
Dispatch( {}, "graph title", TextEditBox, {Set Text( "Age = " || Char( ages[iAge] ) )} ), // add the age= title
Dispatch( {}, "Graph Builder", OutlineBox, {Set Title( "" )} ) // suppress the Graph Builder title
)
)
);
grid << append( bb ); // add the graph to the grid
); // the iAge loop
dtBigClass << clearRowStates; // undo the final selection
New Window( "the report", V List Box( H Center Box( Text Box( "Big Report", <<SETFONTSIZE></SETFONTSIZE>
Reports grouped in a 3-wide gridReports grouped in a 3-wide gridBerichte, gruppiert in einem 3-teiligen Raster
Betreff: So zeichnen Sie ein Diagramm mit Referenzlinien für jedes Element der TabellenzusammenfassungDanke @Craige_Hales für den Link, aber meine Hauptschwierigkeit besteht darin, wie ich die Ausgabe der einzelnen Diagramme programmieren kann, da jedes seine eigenen Referenzlinien hat. Genauer gesagt frage ich mich, wie ich Diagramme für jede Farbe in dieser Datentabelle generieren kann:

Danke!
Betreff: So zeichnen Sie ein Diagramm mit Referenzlinien für jedes Element der TabellenzusammenfassungHier ist ein verwandter Beitrag: https://community.jmp.com/t5/JSL-Cookbook/Use-Summary-to-Automatically-Add-Reference-Lines-to-Graph/ta-p/41709
Betreff: So zeichnen Sie ein Diagramm mit Referenzlinien für jedes Element der TabellenzusammenfassungDanke @SDF1 für Ihre Antwort und entschuldigen Sie, dass ich mich nicht ganz klar ausgedrückt habe. Hier möchte ich etwas näher erläutern:
Zunächst versuche ich, das Skript in einem separaten Skriptfenster zu schreiben, damit ich es unabhängig ausführen kann. Hier ist der erste Teil des Skripts, in dem ich versuche, die Zusammenfassung zu erhalten:
Names Default To Here( 1 );
dt = Current Data Table();
Summary = dt << Summary(
Group( :Name, :Grade ),
Median( :Score ),
// other statistics can be added here//
Link to Original Data Table( 0 )
);
Die Ausgabe sieht folgendermaßen aus:

Was ich nun wirklich möchte, sind die 9 Diagramme (Score vs. # try) (eines für jede Zeile (mit N-Zeilen-Datenpunkten)) und dann die Statistiken jeder Gruppe verwenden, um sie zu den Referenzlinien hinzuzufügen (alles durch Skripterstellung).
In Ihrem Diagrammbeispiel sieht es so aus, als ob es sich um „Name1“ mit einer beliebigen Note handelt.
Danke
Betreff: So zeichnen Sie ein Diagramm mit Referenzlinien für jedes Element der TabellenzusammenfassungHallo @spinup ,
Ich bin mir nicht sicher, ob ich ganz verstehe, was Sie tun möchten, aber es könnte Ihnen schwerfallen, das Ganze in einem Skript zu schreiben. Wenn Sie die Datentabelle eine Weile aufbewahren oder laden, möchten Sie die Analysen möglicherweise separat durchführen und sie dann in der Datentabelle speichern.
Wenn Sie das Ganze tatsächlich per Skript erstellen möchten, müssen Sie dennoch die Analysen ausführen, um die 25/75-Quantile usw. zu bestimmen.
Wenn Sie sagen, dass Sie „Punktzahl vs. # Versuch“ grafisch darstellen, meinen Sie dann, dass bei einer „Anpassung von y an x“ die Punktzahl „y“ und „# Versuch“ „x“ ist?
Wenn Sie also „Tabellenzusammenfassung“ sagen, meinen Sie damit, dass Sie den Mittelwert der Punktzahl ermitteln und #versuchen, während Sie nach Name und Note gruppieren? Oder meinen Sie damit, dass Sie die Note anhand des Namens tabellarisch auflisten und den Mittelwert aus den Werten „score“ und „#try“ ermitteln?
Sie können es jedoch auf verschiedene Arten tun. Ich habe Ihre Tabelle genommen und sie in JMP importiert, und hier ist, was ich getan habe (vorausgesetzt, ich denke genauso darüber nach wie Sie):
Tabellieren Sie nach Namen (A, B, C sind die # Versuche). Dies hilft, die Mittel zu ermitteln, aber Sie können dies bei Bedarf auch separat skripten.

Vor diesem Hintergrund habe ich es auf verschiedene Arten grafisch dargestellt: bivariate Anpassung oder Histogramm (im Histogramm sind die Quartilinformationen bereits im Boxplot verfügbar). und dann können Sie Referenzlinien auf die normale Weise hinzufügen.


Um all dies per Skript zu erstellen, verwenden Sie unbedingt die rote Schaltfläche, um zum eigentlichen JSL-Skript zu gelangen und das zu generieren, was Sie möchten. Aber auch hier gilt: Wenn Sie das Skript in der Datentabelle speichern, können Sie jedes Mal, wenn Sie die Datentabelle öffnen, auf den grünen Hot-Button klicken und es schnell erneut ausführen.
Hoffe das hilft!,
DS