Salut à tous,
Scripteur JSL inexpérimenté ici. Toutes mes excuses s'il s'agit d'une question triviale, mais je me demandais s'il y avait un moyen d'insérer dans une variable la commande 3D de nuage de points pour un angle de rotation particulier (prédéterminé par la rotation de l'utilisateur du graphique 3D généré en faisant manuellement le nuage de points 3D) de l'intérieur un script JSL. Par exemple,
sp = Scatterplot 3D(
Y( :age, :height, :weight ),
Frame3D( Set Grab Handles( 0 ), Set Rotation( -54, 0, 38 ) )
);
, mais l'idée est de pouvoir le faire sans copier-coller manuellement les valeurs de rotation dans le code, car j'essaie d'automatiser un processus qui nécessite en entrée les valeurs de rotation à partir d'un nuage de points déjà généré. L'objectif final est d'avoir un script qui prend les valeurs de rotation prédéterminées comme entrée et qui s'interface avec un script R (déjà écrit) pour générer un tracé 2D à partir du nuage de points 3D, ce qui me permettrait de contourner les inconvénients de travailler avec le presse-papiers Mac .
Toute aide est appréciée, merci.
En guise de suivi, existe-t-il un moyen d'insérer le nuage de points actuellement ouvert dans une variable?
Cette question de discussion semble être liée à, ou la même question que la discussion précédente Sélectionnez les colonnes de rotation et de données à partir du script de tracé de nuage de points 3D
Pour répondre à la question spécifique de cet article, votre script
sp = Scatterplot 3D(
Y( :age, :height, :weight ),
Frame3D( Set Grab Handles( 0 ), Set Rotation( -54, 0, 38 ) )
);
lorsqu'il est exécuté, génère un objet d'affichage de sortie accessible dans JSL en créant une variable pour pointer vers l'objet
spr = report( sp );
//or
spr = sp << report;
"spr" ne contient pas le nuage de points, mais plutôt un pointeur vers l'objet supérieur dans l'arborescence d'affichage de sortie qui contient le nuage de points et les divers objets associés à l'affichage de sortie.
Vous trouverez ci-dessous le script que j'ai écrit pour la question de discussion référencée ci-dessus.Dans celui-ci, il permet à l'utilisateur d'exécuter un nuage de points 3D, et lorsque le nuage de points est fermé, il entre dans l'arborescence d'affichage et extrait le script JMP qui, s'il était exécuté, régénérerait le nuage de points 3D, comme il l'était à l'époque. était fermé.Le script continue ensuite et extrait les colonnes pour les 3 axes et les valeurs de rotation, dans 2 listes JMP appelées respectivement varsList et rotationList.À partir de là, il ajoute ces valeurs à la table de données JMP d'origine en tant que nouvelles colonnes, puis enregistre la table de données en tant que fichier csv.
Ne sachant pas quel est le format de ce dont vous avez besoin dans votre fichier csv pour passer à R, ce n'était qu'une estimation de ce dont vous avez besoin.
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");
Pour noter le fonctionnement de JMP, on ne peut pas placer le nuage de points dans une variable, puis le transmettre à R ou l'enregistrer en tant que fichier .csv.Cependant, on peut extraire l'image du nuage de points lors de l'enregistrement de l'image dans un fichier image, ou passer l'image sous forme de goutte.Je ne sais pas exactement ce que vous recherchez.Vous voudrez peut-être vous pencher sur l'automatisation JMP, qui vous permettrait d'appeler R à partir de JMP et de transmettre les informations dont vous avez besoin directement de JMP à R.
Veuillez revenir à la communauté avec plus de détails sur exactement ce dont vous avez besoin et nous tenterons de vous aider à résoudre les problèmes.
Enfin, je vous encourage vivement à prendre le temps de lire le Guide de script pour JMP / JSL qui se trouve dans la bibliothèque de documentation JMP sous le menu déroulant Aide.