JSL: So durchlaufen Sie Spalten, generieren einen Graph Builder-Bericht und speichern sie jeweils als JPG-DateiHallo,
Ich habe einen Datensatz mit 41 Variablen. Ich muss die ersten 40 jeweils mit den letzten grafisch darstellen, um beispielsweise 40 Boxplots oder Jitter-Plots zu erstellen.
Das Erstellen eines schönen, voll ausgestatteten Plots über das Menü „Grafik erstellen“ ist einfach und macht sogar Spaß. Ich weiß, wie ich das Skript meiner Arbeit speichern kann, aber ich weiß nicht, wie ich eine Schleife schreiben soll, die bei jeder Iteration eine andere Variable übernimmt und diese in meinem ursprünglichen Diagrammcode ersetzt. Mit anderen Worten: Wenn ich 20 Codezeilen habe, möchte ich eine Schleife, die denselben Code immer wieder ausführt und nur die Stelle ändert, an der ich die abhängige Variable definiere. Außerdem benötige ich eine schöne Möglichkeit, die Ergebnisse anzuzeigen (40 Fenster sind nicht praktikabel), also dachte ich, ich könnte jedes einzelne als JPG speichern, bevor ich zur nächsten Iteration übergehe. Ist das mit JMP möglich?
Danke !
Betreff: JSL-SchleifeDas folgende Beispiel zeigt, wie Sie eine Liste von Spaltennamen als Zeichenfolgen erhalten.Die For-Schleife generiert einen unsichtbaren Graph Builder, beginnend mit der zweiten Spalte in der Liste, da die erste als X verwendet wird.(Der ursprüngliche Beitrag müsste diese so anpassen, dass sie mit der ersten Spalte in der Liste beginnen und vor der letzten Spalte in der Liste enden.) Jeder Graph Builder-Bericht wird als JPG-Datei gespeichert, in der der Spaltenname im Dateinamen enthalten ist.Abschließend werden die Datentabelle und die unsichtbaren Berichte geschlossen.
/* Open a sample data table */
dt = Open( "$SAMPLE_DATA\Fitness.jmp" );
/* Obtain a list of numeric/continuous column names as strings */
colList = dt << Get Column Names( Continuous, String );
/* Loop through the list to generate the desired Graph Builder
and save the report as a JPEG file */
For( i = 2, i <= Nitems( colList ), i++,
gb = dt << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables(
X( :Age ),
Y( Column( dt, colList[i] ) ),
Color( :Age )
),
Elements(
Points(
X,
Y,
Legend( 3 ),
Summary Statistic( "Mean" ),
Error Bars( "Confidence Interval" )
)
),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Marker Size( 5 )}
)
),
Invisible
);
gb << Save Picture( "E:\Trash\Graph Builder_" || colList[i] ||".jpg", JPEG );
);
/* Close table and all invisible reports */
Close( dt, No Save );
Hoffentlich hilft das!
JSL-SchleifeHallo,
Danke für deinen Hilfsversuch. Leider bin ich mit JSL immer noch nicht vertraut genug (wenn ich eine Arbeitspause habe, werde ich mich eingehend damit befassen), und ich hatte Probleme mit den Klammern und all dem, also hat Ihr Vorschlag wahrscheinlich nicht funktioniert hatte ein Schild an der falschen Stelle.
Mein ursprünglicher Code ist:
Graph Builder(
Size( 880, 750 ),
Show Control Panel( 0 ),
Variables(
X( :Cutoff, Size( 0, 21 ) ),
Y( :S1, Size( 0, 22 ) ),
Color( :Cutoff )
),
Elements(
Points( X, Y, Color, Legend( 1 ), Jitter( 1 ) ),
Line(
X,
Y,
Color,
Legend( 2 ),
Row order( 0 ),
Error Bars( "Confidence Interval" ),
Summary Statistic( "Mean" )
)
),
SendToReport( Dispatch( {}, "Graph Builder", FrameBox, {Marker Size( 5 )} ) )
);
Können Sie mir bitte helfen, es mit der Schlaufe zu umwickeln?
Prost!
JSL-SchleifeHallo!Was Sie tun möchten, ist ziemlich einfach.
Zunächst möchten Sie in Ihrem Skript die aktuelle Datentabelle definieren:
cd = Current Data Table();
Rufen Sie nun die Liste der Spaltennamen ab:
column_names = cd << Get Column Names;
Nun gibt es mehrere Möglichkeiten, den nächsten Teil zu erledigen, aber ich finde, dass dies die einfachste ist.Sie möchten mit einer Textzeichenfolge beginnen, die wir schließlich analysieren und auswerten.Der erste Teil besteht darin, ein neues Fenster zu erstellen.
nw = "New Window(\"Graphs\",
randomname = V List Box(";
Jetzt können wir die Schleife schreiben, die Ihren benutzerdefinierten Code mit einer kleinen Änderung einfügt.Ich gehe davon aus, dass Sie wissen, wie man eine JMP-for-Schleife verwendet – ich werde einfach alle bis auf die letzte Spalte in der Tabelle durchlaufen.
for(i=1,i<=length(column_names)-1,i++,
nw = nw || "PUT YOUR CUSTOM CODE HERE*" || ",";
);
*In Ihrem benutzerdefinierten Code, in dem Sie die abhängige Variable definieren, entfernen Sie sie und ersetzen Sie sie durch
:Name(\"" || column_name || "\")
Dadurch wird der Textname jeder abhängigen Variablen eingefügt, die Sie in dem von Ihnen geschriebenen benutzerdefinierten Skript haben.
Schließlich müssen wir das neue Fenster, das wir zuvor begonnen haben, fertigstellen: Die erste Zeile beendet das Schreiben des Codes, um das neue Fenster zu erstellen, die zweite Zeile analysiert zunächst den Text, um daraus Code zu machen, und wertet dann den in nw enthaltenen Code aus.
nw = nw || "));";
eval(parse(nw));
Das sollte reichen – lassen Sie mich wissen, wenn Sie Fragen haben oder konkrete Hilfe benötigen!