Appel des fonctions du menu JMP intégré dans le scriptSalut tout le monde,
Scripteur JSL inexpérimenté ici. Toutes mes excuses si c'est une question triviale, mais je me demandais s'il y avait un moyen d'insérer dans une variable la commande scatterplot 3D pour un angle de rotation particulier (prédéterminé par la rotation par l'utilisateur du graphique 3D généré en effectuant manuellement un 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 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 en entrée et s'interface avec un script R (déjà écrit) pour générer un tracé 2D à partir du nuage de points 3D. Cela me permettrait d'éviter les inconvénients liés au travail avec le presse-papiers Mac. .
Toute aide est appréciée, merci.
Automatisation et scriptsIngénierie Qualité et ProcédésRe : Appel des fonctions du menu JMP intégré dans le scriptJe pense qu'il y a une inadéquation entre les attentes.L'objectif du groupe de discussion de la communauté JMP n'est pas de fournir des solutions complètes à la demande des utilisateurs JMP.Le script que j'ai fourni doit être considéré comme une illustration d'une façon d'aborder le problème.Un outil d'apprentissage permettant à l'utilisateur de développer sa solution finale.
Maintenant, pour résoudre le problème de la dernière entrée, comment imaginez-vous que l'utilisateur JMP exécute le script souhaité ?Comment choisiront-ils les colonnes à utiliser dans le nuage de points ?
Si le plan est que l'utilisateur exécute simplement un nuage de points 3D, puis lorsqu'il obtient le tracé au point où il le souhaite, puis exécute un script pour supprimer le script et obtenir les colonnes et les rotations, voici un morceau de JSL qui trouve la fenêtre Scatterplot puis prend le code de ma dernière entrée, crée un fichier csv
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 );
Re : Appel des fonctions du menu JMP intégré dans le scriptMerci pour les conseils utiles. Je vais tenter d'intégrer cela dans ma solution. C'est logique. Mon seul souci avec ce JSL est que, pour chaque nouvel ensemble de données, je devrais taper manuellement 3 nouveaux noms de colonnes ( :age, etc...) pour chaque nouvel ensemble de données sur lequel je souhaite exécuter mon script, ce qui dans mon cas irait à l’encontre de l’objectif de l’automatisation de ce processus.Re : Appel des fonctions du menu JMP intégré dans le scriptCette question de discussion semble être liée à la même question que la discussion précédente. Sélectionnez la rotation et les colonnes de données à partir du script de diagramme de dispersion 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 est plutôt un pointeur vers l'objet supérieur de 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 est exécuté, régénérerait le nuage de points 3D, exactement comme il l'était lorsqu'il était fermé.Le script continue ensuite et extrait les colonnes des 3 axes et des 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 sous forme de nouvelles colonnes, puis enregistre la table de données sous forme de fichier CSV.
Ne sachant pas quel est le format de ce dont vous avez besoin dans votre fichier csv pour le transmettre à R, ce n'était qu'une supposition de ce qui est nécessaire.
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 comprendre le fonctionnement de JMP, il est impossible de placer le nuage de points dans une variable, puis de le transmettre à R ou de l'enregistrer sous forme de fichier .csv.Cependant, on peut extraire l'image du nuage de points en enregistrant l'image dans un fichier image, ou en transmettant l'image sous forme de blob.Je ne sais pas exactement ce que vous recherchez.Vous souhaiterez peut-être vous pencher sur l'automatisation de JMP, qui vous permettrait d'appeler R depuis JMP et de transmettre les informations dont vous avez besoin directement de JMP à R.
Veuillez revenir à la communauté avec plus de détails sur ce dont vous avez exactement besoin et nous tenterons de vous aider à résoudre les problèmes.
Enfin, je vous encourage fortement à 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.
Re : Appel des fonctions du menu JMP intégré dans le scriptÀ la suite de cela, existe-t-il un moyen d'insérer le nuage de points actuellement ouvert dans une variable ?