Aufrufen integrierter JMP-Menüfunktionen innerhalb des SkriptsHallo allerseits,
Unerfahrener JSL-Skripter hier. Entschuldigung, wenn dies eine triviale Frage ist, aber ich habe mich gefragt, ob es eine Möglichkeit gibt, den Scatterplot-3D-Befehl für einen bestimmten Rotationswinkel (vorbestimmt durch die Drehung des 3D-Diagramms durch den Benutzer, das durch manuelles Ausführen des Scatterplot-3D-Diagramms erstellt wurde) von innen in eine Variable einzufügen ein JSL-Skript. Zum Beispiel,
sp = Scatterplot 3D(
Y( :age, :height, :weight ),
Frame3D( Set Grab Handles( 0 ), Set Rotation( -54, 0, 38 ) )
);
, aber die Idee besteht darin, dies tun zu können, ohne die Rotationswerte manuell in den Code kopieren und einfügen zu müssen, da ich versuche, einen Prozess zu automatisieren, der als Eingabe die Rotationswerte aus einem bereits generierten Streudiagramm benötigt. Das Endziel besteht darin, ein Skript zu haben, das die vorgegebenen Rotationswerte als Eingabe verwendet und mit einem R-Skript (bereits geschrieben) kommuniziert, um aus dem 3D-Streudiagramm ein 2D-Diagramm zu generieren. Dies würde es mir ermöglichen, die Unannehmlichkeiten der Arbeit mit der Mac-Zwischenablage zu umgehen .
Wir freuen uns über jede Hilfe, danke.
Automatisierung und SkripterstellungQualitäts- und VerfahrenstechnikBetreff: Aufrufen integrierter JMP-Menüfunktionen innerhalb des SkriptsIch denke, dass die Erwartungen nicht übereinstimmen.Der Zweck der Diskussionsgruppe in der JMP-Community besteht nicht darin, auf Anfrage von JMP-Benutzern fertige Lösungen bereitzustellen.Das von mir bereitgestellte Skript muss als Beispiel für eine Möglichkeit zur Lösung des Problems betrachtet werden.Ein Lerntool, mit dem der Benutzer seine endgültige Lösung vertiefen kann.
Um nun auf das Problem des letzten Eintrags einzugehen: Wie stellen Sie sich vor, dass der JMP-Benutzer das gewünschte Skript ausführt?Wie werden sie auswählen, welche Spalten im Streudiagramm verwendet werden sollen?
Wenn der Plan darin besteht, dass der Benutzer einfach ein 3D-Streudiagramm ausführt und dann, wenn die Darstellung den gewünschten Punkt erreicht, ein Skript ausführt, um das Skript zu entfernen und die Spalten und Rotationen zu erhalten, finden Sie hier einen Teil dazu von JSL, der das Scatterplot-Fenster findet und dann den Code aus meinem letzten Eintrag übernimmt und eine CSV-Datei erstellt
Names Default To Here( 1 );
// Find the current report
curReport = Current Report();
// Check to see if the JMP current report is actually the Scatterplot 3D report
If( curReport[Outline Box( 1 )] << get title == "Scatterplot 3D",
theScript = Char( (xx[Outline Box( 1 )] << get scriptable object) << get script );
dt = Current Data Table();
,
// If not, find the window that is the 3D plot
i = 1;
While( Try( Window( i )[Outline Box( 1 )] << get title, "" ) != "Scatterplot 3D" & i < 100, i++ );
If( i < 100,
curReport = Window( i )[Outline Box( 1 )];
theScript = Char( (curReport[Outline Box( 1 )] << get scriptable object) << get script );
dt = Data Table( Trim( Word( 1, Window( i ) << get window title, "-" ) ) );
,
// If no Scatterplot 3D is jound, display an error
Dialog( "Error: No Scatterplot 3D was found" );
Throw();
);
);
// If the code makes it to here, strip off the script components needed
varsList = {};
Insert Into( varsList, Word( 2, Substr( theScript, Contains( theScript, "Y(" ) ), ":," ) );
Insert Into( varsList, Word( 4, Substr( theScript, Contains( theScript, "Y(" ) ), ":," ) );
Insert Into( varsList, Word( 6, Substr( theScript, Contains( theScript, "Y(" ) ), ":,)" ) );
rotationList = {};
Insert Into( rotationList, Word( 2, Substr( theScript, Contains( theScript, "Rotation(" ) ), "()," ) );
Insert Into( rotationList, Word( 3, Substr( theScript, Contains( theScript, "Rotation(" ) ), "()," ) );
Insert Into( rotationList, Word( 4, Substr( theScript, Contains( theScript, "Rotation(" ) ), "()," ) );
// Add the columns used and the rotations to a new data table
dtSub = dt << subset( columns( Eval( varsList ) ), selected rows( 0 ) );
dtSub << New Column( "_Vars_", character, set values( varsList ) );
dtSub << New Column( "_Rotation_", character, set values( rotationList ) );
dtSub << Save( "$TEMP/passvalues.csv" );
Close( dtSub, nosave );
Betreff: Aufrufen integrierter JMP-Menüfunktionen innerhalb des SkriptsVielen Dank für den hilfreichen Rat. Ich werde versuchen, dies in meine Lösung zu integrieren. Das macht Sinn. Meine einzige Sorge bei dieser JSL besteht darin, dass ich für jeden neuen Datensatz manuell drei neue Spaltennamen (: Alter usw.) für jeden neuen Datensatz eingeben müsste, für den ich mein Skript ausführen möchte, was in meinem Fall der Fall ist würde den Zweck der Automatisierung dieses Prozesses zunichte machen.Betreff: Aufrufen integrierter JMP-Menüfunktionen innerhalb des SkriptsDiese Diskussionsfrage scheint mit der vorherigen Diskussion in Zusammenhang zu stehen oder dieselbe Frage zu sein Wählen Sie Rotations- und Datenspalten aus dem 3D-Streudiagramm-Plotskript aus
Um die spezifische Frage aus diesem Beitrag zu beantworten: Ihr Skript
sp = Scatterplot 3D(
Y( :age, :height, :weight ),
Frame3D( Set Grab Handles( 0 ), Set Rotation( -54, 0, 38 ) )
);
Erzeugt bei der Ausführung ein Ausgabeanzeigeobjekt, auf das in JSL zugegriffen werden kann, indem eine Variable erstellt wird, die auf das Objekt zeigt
spr = report( sp );
//or
spr = sp << report;
„spr“ enthält nicht das Streudiagramm, sondern ist ein Zeiger auf das oberste Objekt im Ausgabeanzeigebaum, das das Streudiagramm und die verschiedenen mit der Ausgabeanzeige verknüpften Objekte enthält.
Unten finden Sie das Skript, das ich für die oben genannte Diskussionsfrage geschrieben habe.Darin ermöglicht es dem Benutzer, ein Streudiagramm 3D auszuführen, und wenn das Streudiagramm geschlossen wird, geht es in den Anzeigebaum und extrahiert das JMP-Skript, das bei Ausführung das Streudiagramm 3D so neu generieren würde, wie es war, als es war war geschlossen.Das Skript fährt dann fort und extrahiert die Spalten für die drei Achsen und die Rotationswerte in zwei JMP-Listen mit den Namen varsList bzw. rotationList.Von dort aus fügt es diese Werte als neue Spalten wieder zur ursprünglichen JMP-Datentabelle hinzu und speichert die Datentabelle dann als CSV-Datei.
Da Sie nicht wissen, welches Format Sie in Ihrer CSV-Datei benötigen, um sie an R zu übergeben, war dies nur eine Vermutung, was benötigt wird.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\big class.jmp" );
sp = Scatterplot 3D(
Y( :age, :height, :weight ),
Frame3D( Set Grab Handles( 0 ), Set Rotation( -54, 0, 38 ) )
);
sp << on close(
theScript = Char( (Report( sp ) << get scriptable object) << get script );
varsList = {};
Insert Into( varsList, Word( 2, Substr( theScript, Contains( theScript, "Y(" ) ), ":," ) );
Insert Into( varsList, Word( 4, Substr( theScript, Contains( theScript, "Y(" ) ), ":," ) );
Insert Into( varsList, Word( 6, Substr( theScript, Contains( theScript, "Y(" ) ), ":,)" ) );
rotationList = {};
Insert Into( rotationList, Word( 2, Substr( theScript, Contains( theScript, "Rotation(" ) ), "()," ) );
Insert Into( rotationList, Word( 3, Substr( theScript, Contains( theScript, "Rotation(" ) ), "()," ) );
Insert Into( rotationList, Word( 4, Substr( theScript, Contains( theScript, "Rotation(" ) ), "()," ) );
dtSub = dt << subset( columns( Eval( varsList ) ), selected rows( 0 ) );
dtSub << New Column( "_Vars_", character, set values( varsList ) );
dtSub << New Column( "_Rotation_", character, set values( rotationList ) );
dtSub << Save( "$TEMP/passvalues.csv" );
close( dtSub, nosave );
);
// This line opens the csv back into JMP
//open("$TEMP/passvalues.csv");
Als Hinweis zur Funktionsweise von JMP: Man kann das Streudiagramm nicht in eine Variable einfügen und es dann an R übergeben oder als CSV-Datei speichern.Sie können jedoch das Bild des Streudiagramms extrahieren, indem Sie es in einer Bilddatei speichern oder das Bild als Blob übergeben.Ich weiß nicht genau, wonach Sie suchen.Vielleicht möchten Sie sich mit der JMP-Automatisierung befassen, die es Ihnen ermöglicht, R von JMP aus aufzurufen und die benötigten Informationen direkt von JMP an R zu übergeben.
Bitte kontaktieren Sie die Community mit weiteren Einzelheiten darüber, was genau Sie benötigen. Wir werden dann versuchen, Ihnen bei der Lösung der Probleme zu helfen.
Abschließend empfehle ich Ihnen dringend, sich die Zeit zu nehmen, den Skriptleitfaden für JMP/JSL zu lesen, den Sie in der JMP-Dokumentationsbibliothek im Pulldown-Menü „Hilfe“ finden.
Betreff: Aufrufen integrierter JMP-Menüfunktionen innerhalb des SkriptsGibt es im Anschluss daran eine Möglichkeit, das aktuell geöffnete Streudiagramm in eine Variable einzufügen?