Hallo allerseits,
Unerfahrener JSL-Scripter hier. Entschuldigung, wenn dies eine triviale Frage ist, aber ich habe mich gefragt, ob es eine Möglichkeit gibt, den Streudiagramm-3D-Befehl für einen bestimmten Drehwinkel (vorgegeben durch die Drehung des 3D-Diagramms durch den Benutzer, das durch manuelles Ausführen von Streudiagramm-3D erzeugt wird) von innen in eine Variable einzufügen ein JSL-Skript. Beispielsweise,
sp = Scatterplot 3D(
Y( :age, :height, :weight ),
Frame3D( Set Grab Handles( 0 ), Set Rotation( -54, 0, 38 ) )
);
Die Idee ist jedoch, dies zu tun, ohne die Rotationswerte manuell in den Code einzufügen, da ich versuche, einen Prozess zu automatisieren, bei dem die Rotationswerte aus einem bereits generierten Streudiagramm als Eingabe erforderlich sind. Das Endziel besteht darin, ein Skript zu haben, das die vorgegebenen Rotationswerte als Eingabe verwendet und mit einem (bereits geschriebenen) R-Skript zusammenarbeitet, um aus dem 3D-Streudiagramm ein 2D-Diagramm zu erstellen. Auf diese Weise kann ich die Unannehmlichkeiten der Arbeit mit der Mac-Zwischenablage umgehen .
Jede Hilfe wird geschätzt, danke.
Diese Diskussionsfrage scheint mit der vorherigen Diskussion verwandt zu sein oder dieselbe Frage wie diese Wählen Sie Rotations- und Datenspalten aus dem 3D-Streudiagramm-Diagrammskript 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 ) )
);
Generiert beim Ausführen ein Ausgabeanzeigeobjekt, auf das in JSL zugegriffen werden kann, indem eine Variable erstellt wird, die auf das Objekt verweist
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 Objekte enthält, die der Ausgabeanzeige zugeordnet sind.
Unten ist das Skript, das ich für die oben genannte Diskussionsfrage geschrieben habe.Darin kann der Benutzer ein Streudiagramm 3D ausführen. Wenn das Streudiagramm geschlossen ist, wird es in den Anzeigebaum eingefügt und extrahiert das JMP-Skript, das bei Ausführung das Streudiagramm 3D so neu generiert, wie es war, als es war war geschlossen.Das Skript fährt dann fort und extrahiert die Spalten für die 3 Achsen und die Rotationswerte in 2 JMP-Listen mit den Namen varsList bzw. rotationsliste.Von dort aus werden diese Werte als neue Spalten wieder zur ursprünglichen JMP-Datentabelle hinzugefügt und die Datentabelle dann als CSV-Datei gespeichert.
Da Sie nicht wussten, welches Format Sie in Ihrer CSV-Datei benötigen, um es an R zu übergeben, war dies nur eine Vermutung dessen, 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 auf die Funktionsweise von JMP kann das Streudiagramm nicht in eine Variable eingefügt und dann an R übergeben oder als CSV-Datei gespeichert werden.Man kann jedoch das Bild des Streudiagramms extrahieren, indem man das Bild in einer Bilddatei speichert, oder das Bild als Blob übergeben.Ich weiß nicht genau, wonach Sie suchen.Möglicherweise möchten Sie sich mit der JMP-Automatisierung befassen, mit der Sie R von JMP aus aufrufen und die benötigten Informationen direkt von JMP an R weitergeben können.
Bitte wenden Sie sich an die Community, um genau zu erfahren, was Sie benötigen. Wir werden versuchen, Ihnen bei der Lösung der Probleme zu helfen.
Abschließend empfehle ich Ihnen dringend, sich die Zeit zu nehmen, um das Skripthandbuch für JMP / JSL zu lesen, das Sie in der JMP-Dokumentationsbibliothek im Pulldown-Menü Hilfe finden.