CIAO. Esiste un metodo per ottenere i nomi e i ruoli delle variabili utilizzati in una finestra del generatore di grafici? Supponiamo di avere una finestra contenente un grafico del generatore di grafici. C'è un modo per determinare a livello di codice quale variabile è stata utilizzata per X, Y, Xgroup, Ygroup, ecc.?
Ad esempio, supponiamo che l'utente abbia creato un grafico in gb. Ora desiderano eseguire uno script generalizzato sulla trama (ad esempio uno script grafico). Lo script deve sapere quali variabili sono state utilizzate in quali ruoli senza che l'utente lo dica.
Supponiamo di iniziare con questa trama:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y), Smoother(X, Y))
);
Ora desidero eseguire uno script sulla trama risultante. La mia sceneggiatura non è a conoscenza di ciò che è contenuto nella trama. Ecco 2 cose che ho provato ma non hanno funzionato:
Names Default to Here(1);
//Try to get script used to create plot
win = Window(1); //gets most recent window clicked on
gb = win << Report; //DNW: returns missing (win is not a platform)
scr = gb << Get Script; //from here I could parse the string to determine the roles
//Another stab: try to read the XML
win = Window(1);
str = win << Get XML; //This gives me the XML of the window, but does not provide the actual variable names used in the roles.
Se riuscissi a capire come convertire il riferimento alla finestra in un rapporto, penso che potrei far funzionare il primo metodo. Qualche idea?
</CODE></P></LINGO-BODY><LINGO-LABS id="lingo-labs-272624" slang="en-US" mode="NONE"><LINGO-LABEL>Scripting</LINGO-LABEL></LINGO-LABS><LINGO-SUB id="lingo-sub-273136" slang="en-US" mode="NONE">Re: Ottenere i nomi delle variabili da graphbuilder</LINGO-SUB><LINGO-BODY id="lingo-body-273136" slang="en-US" mode="NONE">Grazie. Era esattamente ciò di cui avevo bisogno.</LINGO-BODY><LINGO-SUB id="lingo-sub-273026" slang="en-US" mode="NONE">Re: Ottenere i nomi delle variabili da graphbuilder</LINGO-SUB><LINGO-BODY id="lingo-body-273026" slang="en-US" mode="NONE"><P><A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/3648" target="_blank">@nikles</A> hai ragione, la funzionalità dell'etichetta al passaggio del mouse si basa sull'interattività. Esistono modi per attivarlo utilizzando JSL (spostando il mouse, mettendo in pausa, ecc.) Ma ciò aggiungerebbe molta complessità alla soluzione di cui non hai davvero bisogno.</P>
<P>Sulla base della tua risposta a e della soluzione proposta da<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/2687" target="_blank"> @txnelson</A> , ecco uno script che ti porterà dal riferimento di Windows fino ai riferimenti alle variabili del Costruttore di grafici.</P>
<PRE><CODE class=" language-jsl">Names Default to Here(1);
win = New Window("A Title", // Let's create a Window that contains a Graph Builder
Graph Builder( // with a LDF to make things interesting (multiple OutlineBoxes).
Size( 517, 448 ),
Show Control Panel( 0 ),
Variables( X( :sex ), Y( :height ) ),
Elements( Bar( X, Y, Legend( 6 ) ) ),
Local Data Filter(
Add Filter( columns( :height ), Where( :height >= 60.048 & :height <= 70 ) )
)
));
ob = win[OutlineBox("Graph Builder")]; // This is how you get the Display Box that contains the GB object
gbb = ob << Get Scriptable Object; // Now we extract the GB object from the Display Box
gb_expr = gbb << Get Script; // You could wrap in Char() to get the GB script as a string
gb_nargs = NArg(gb_expr); // and use pattern matching. Instead,
for(i = 1, i <= gb_nargs, i++, // let's see how to inspect it as an expression.
child = Arg(gb_expr, i);
If (HeadName(child) == "Variables",
var_nargs = NArg(child);
for(j = 1, j <= var_nargs, j++,
Show(Arg(child, j))
);
Break();
)
);
tu dovresti vedere:
Arg(child, j) = X(:sex);
Arg(child, j) = Y(:height);
Le estensioni etichetta al passaggio del mouse aggiunte in JMP 15 consentono di definire uno script che verrà eseguito nel contesto di un grafico (un contesto di esecuzione dell'etichetta al passaggio del mouse per essere precisi). Questo contesto fornisce informazioni nelle variabili locali sull'elemento visivo su cui si passa il mouse, incluse le variabili utilizzate come "raggruppamenti" (X, GroupX, GroupY, ecc.) e le misure (Y, Colore, Dimensione, ecc.).
Puoi accedere a queste variabili nel tuo script e forse usarle per definire una nuova visualizzazione o analisi. Questo è esattamente il modo in cui funzionano i preset delle etichette al passaggio del mouse. Potresti selezionarne uno e quindi dare un'occhiata al codice JSL generato nell'editor di etichette al passaggio del mouse (o salvando lo script) per vedere un esempio.
Puoi anche vedere i loro valori usando il preset "contesto" di Textlet (disponibile dal pannello Textlet sull'editor di etichette al passaggio del mouse):

Viene fornito un elenco completo delle variabili rese disponibili nel contesto di esecuzione Qui.
Pensavo di ricordare una domanda precedente su questo, ma ho cercato e non l'ho trovata.Indipendentemente da ciò, il metodo che ho usato per fare questo genere di cose è inviare un messaggio a Graph Builder per recuperare lo script utilizzato per creare il display, in una variabile carattere, quindi analizzo la stringa per trovare le variabili menzionate .
Il copione
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
gb = Graph Builder(
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 6 ) ), Smoother( X, Y, Legend( 7 ) ) )
);
theScript = char(gb << get script);
show(theScript);
recupera:
theScript = "Graph Builder(Variables(X(:weight), Y(:height)), Elements(Points(X, Y, Legend(6)), Smoother(X, Y, Legend(7))))";