Richiamo delle funzioni del menu JMP integrate all'interno dello scriptCiao a tutti,
Scripter JSL inesperto qui. Mi scuso se questa è una domanda banale, ma mi chiedevo se ci fosse un modo per inserire in una variabile il comando scatterplot 3D per un particolare angolo di rotazione (predeterminato dalla rotazione da parte dell'utente del grafico 3D generato eseguendo manualmente lo scatterplot 3D) dall'interno uno script JSL. Per esempio,
sp = Scatterplot 3D(
Y( :age, :height, :weight ),
Frame3D( Set Grab Handles( 0 ), Set Rotation( -54, 0, 38 ) )
);
, ma l'idea è di poterlo fare senza copiare e incollare manualmente i valori di rotazione nel codice, poiché sto cercando di automatizzare un processo che richiede come input i valori di rotazione da un grafico a dispersione già generato. L'obiettivo finale è avere uno script che prenda come input i valori di rotazione predeterminati e si interfaccia con uno script R (già scritto) per generare un grafico 2D dal grafico a dispersione 3D. Ciò mi consentirebbe di aggirare l'inconveniente di lavorare con gli appunti del Mac .
Ogni aiuto è apprezzato, grazie.
Automazione e scriptingIngegneria della qualità e dei processiRi: Chiamata delle funzioni del menu JMP integrate all'interno dello scriptPenso che ci sia una mancata corrispondenza delle aspettative.Lo scopo del gruppo di discussione nella comunità JMP non è fornire soluzioni complete su richiesta degli utenti JMP.Lo script che ho fornito deve essere considerato come un'illustrazione di un modo per affrontare il problema.Uno strumento di apprendimento che consente all'utente di approfondire la soluzione finale.
Ora per affrontare il problema dell'ultima voce, come immagini l'utente JMP che esegue lo script che desideri?Come sceglieranno quali colonne utilizzare nel grafico a dispersione?
Se il piano è che l'utente esegua semplicemente un grafico a dispersione 3D e poi quando ottiene la trama al punto che desidera, quindi esegue uno script per eliminare lo script e ottenere le colonne e le rotazioni, ecco un pezzo di JSL che trova la finestra Scatterplot e quindi prendendo il codice dalla mia ultima voce, crea un file 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 );
Ri: Chiamata delle funzioni del menu JMP integrate all'interno dello scriptGrazie per l'utile consiglio Tenterà di integrarlo nella mia soluzione. Questo ha senso. La mia unica preoccupazione con questo JSL è che, per ogni nuovo set di dati, dovrei digitare manualmente 3 nuovi nomi di colonna ( :age, ecc...) per ogni nuovo set di dati su cui voglio eseguire il mio script, che nel mio caso vanificherebbe lo scopo di automatizzare questo processo.Ri: Chiamata delle funzioni del menu JMP integrate all'interno dello scriptQuesta domanda di discussione sembra essere correlata o è la stessa domanda della discussione precedente Seleziona la rotazione e le colonne di dati dallo script del grafico a dispersione 3D
Per rispondere alla domanda specifica di questo post, Your script
sp = Scatterplot 3D(
Y( :age, :height, :weight ),
Frame3D( Set Grab Handles( 0 ), Set Rotation( -54, 0, 38 ) )
);
quando eseguito, genera un oggetto di visualizzazione di output a cui è possibile accedere in JSL creando una variabile che punti all'oggetto
spr = report( sp );
//or
spr = sp << report;
"spr" non contiene il grafico a dispersione, ma piuttosto è un puntatore all'oggetto in alto all'interno dell'albero di visualizzazione dell'output che contiene il grafico a dispersione e i vari oggetti associati alla visualizzazione dell'output.
Di seguito è riportato lo script che ho scritto per la domanda di discussione sopra citata.In esso, consente all'utente di eseguire un grafico a dispersione 3D e, quando il grafico a dispersione è chiuso, entra nell'albero di visualizzazione ed estrae lo script JMP che, se eseguito, rigenererebbe il grafico a dispersione 3D, proprio come era quando era era chiuso.Lo script poi prosegue ed estrae le colonne per i 3 assi e i valori di rotazione, in 2 elenchi JMP chiamati rispettivamente varsList e rotationList.Da lì, aggiunge nuovamente tali valori alla tabella dati JMP originale come nuove colonne, quindi salva la tabella dati come file CSV.
Non sapendo quale sia il formato di ciò di cui hai bisogno nel tuo file CSV da passare a R, questa era solo un'ipotesi di ciò che è necessario.
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");
Come nota su come funziona JMP, non è possibile posizionare il grafico a dispersione in una variabile e quindi passarlo a R o salvarlo come file .csv.Tuttavia, è possibile estrarre l'immagine del grafico a dispersione salvandola in un file immagine o passando l'immagine come blob.Non so esattamente cosa stai cercando.Potresti voler esaminare l'automazione di JMP, che ti consentirebbe di chiamare R da JMP e di passare le informazioni di cui hai bisogno direttamente da JMP a R.
Torna alla community con maggiori dettagli su ciò di cui hai esattamente bisogno e faremo un tentativo per aiutarti a risolvere i problemi.
Infine, ti incoraggio vivamente a dedicare del tempo alla lettura della Guida allo scripting per JMP/JSL che puoi trovare nella Libreria della documentazione di JMP nel menu a discesa Guida.
Ri: Chiamata delle funzioni del menu JMP integrate all'interno dello scriptIn seguito, c'è un modo per inserire il grafico a dispersione attualmente aperto in una variabile?