Ciao 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 dell'utente del grafico 3D generato facendo scatterplot 3D manualmente) 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 uno Scatterplot già generato. L'obiettivo finale è quello di avere uno script che prenda i valori di rotazione predeterminati come input e si interfaccia con uno script R (già scritto) per generare un grafico 2D dallo scatterplot 3D Questo mi permetterebbe di circumnavigare l'inconveniente di lavorare con gli appunti del Mac .
Ogni aiuto è apprezzato, grazie.
In seguito a ciò, c'è un modo per inserire lo scatterplot attualmente aperto in una variabile?
Questa 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 viene 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 superiore all'interno della struttura di visualizzazione dell'output che contiene il grafico a dispersione ei vari oggetti associati alla visualizzazione dell'output.
Di seguito è riportato lo script che ho scritto per la Domanda di discussione a cui si fa riferimento sopra.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, rigenera il grafico a dispersione 3D, proprio come era quando era era chiuso.Lo script quindi 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 di nuovo quei 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 per 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 del funzionamento di JMP, non è possibile inserire 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 al salvataggio dell'immagine in un file immagine o passare l'immagine come un 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 necessarie direttamente da JMP a R.
Per favore, torna alla community con maggiori dettagli su esattamente ciò di cui hai 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 può essere trovata nella Libreria della documentazione di JMP sotto il menu a discesa Aiuto.