Invia comandi a più grafici bivariatiHo uno script che genera una serie di grafici bivariati all'interno di una singola finestra, utilizzando un LineUpBox per contenere ogni trama.Dopo che i grafici sono stati creati, voglio che l'utente possa attivare/disattivare i punti del grafico (intendo aggiungere altre opzioni...questo serve solo come esempio).Immagino una casella di controllo o una casella di controllo nella finestra su cui l'utente può fare clic e tutti i grafici rifletteranno questa azione.
Per un singolo grafico, userei il comando:
bvp << Show Points(0/1);
dove bvp è il riferimento al grafico bivariato.Tuttavia, qui ho più trame e non posso usare un singolo riferimento per tutte.Ho provato a fare riferimento al mio LineUpBox che contiene invece le trame:
For(plid = 1, plid <= nplots, plid++,
LUB_plots[plid] << Show Points(pts)
)
dove LUB_plots è il riferimento alla mia scaletta.Questo ciclo verrebbe eseguito ogni volta che l'utente seleziona la casella di controllo, ad esempio.Quando lo faccio, ottengo i seguenti errori:
The display box 'OutlineBox' does not recognize the message 'Show Points'; perhaps you mean one of these: <<Show Properties <<Show HelpKeys <<SetHorizontal <<Horizontal <<SetOpen <<GetHorizontal <<Close Where No Outlines <<Font <<Set Font <<Set Font Style <<Set Font Size <<Reshow <<Set Report Title <<Set Window Title <<Top Parent <<Show Tree Structure <<Restore Window Size <<Set Window Size <<Set Content Size <<Get Window Position <<Show Window <<Get Show Window <<Set Window Title <<Set Window Icon <<Set Print Headers <<Set Print Footers <<Scroll Window <<Set Width <<Set Height <<Horizontal Alignment.
e un'istanza di quanto segue per ogni trama:
(The following message might not be an actual error; the preference 'Report Invalid Display Box Messages' is ON.) The display box 'OutlineBox' does not recognize the message 'Show Points'.
Ho controllato la struttura ad albero e confermo che sì, la casella di visualizzazione superiore è effettivamente una casella di contorno.Quindi almeno so che LineUpBox[plid] punta dove mi aspettavo.Il problema sembra essere che il mio comando <
La mia domanda: come posso fare riferimento a più grafici bivariati?In alternativa, esiste un modo migliore per inviare comandi a più grafici bivariati dopo che sono stati creati?Forse usando una sorta di struttura di comando Dispatch/SendtoReports?
Non sono sicuro nemmeno di come cercare questo nella community.Qualsiasi aiuto è apprezzato.
Ri: Invia comandi a più grafici bivariatiGrazie ancora.Elegante.
Ri: Invia comandi a più grafici bivariatiQuesta sintassi sembra funzionare:
y_axes = (lub << xpath("//AxisBox[@charID='2']"));
y_axes << scale(Log);
Per la documentazione di xpath, vedere ad esempio Tutorial di w3schools su XPath
Ri: Invia comandi a più grafici bivariatiGrazie!Il xpath cmd funziona alla grande per il mio esempio di punti di spettacolo.
Ora ho un seguito.Come posso inviare un comando a tutti i miei grafici che modifica l'asse y da lineare a log?Per cominciare, ho provato a utilizzare il comando xpath con l'intento di creare un elenco di tutti i riferimenti a tutte le caselle dell'asse y.Per prima cosa sto solo cercando di confermare che il comando xpath sta estraendo i riferimenti corretti.Ma non riesco a convincerlo a restituire solo quelle scatole.Ispezionando il codice xml nel registro, ho potuto vedere che le caselle dell'asse y hanno tutte un "charID=\!"2\!", quindi sto cercando di usarlo per differenziare le y dalle x, ma no fortuna.
Names Default To Here(1);
//Example report
Open("$SAMPLE_DATA/Big Class.jmp");
Try(Window("example") << Close Window);
nw = New Window("example",
lub = Lineup Box(
Bivariate(Y(:weight), X(:height), FitLine()),
Bivariate(Y(:weight), X(:age), FitLine()),
Bivariate(Y(:age), X(:age), FitLine()),
Bivariate(Y(:weight), X(:weight), FitLine())
)
);
Show(lub << Get xml);
Show(lub << xpath("//AxisBox")); //list of 8 displayboxes
Show(lub << xpath("//AxisBox[2]")); //empty list
Show(lub << xpath("//AxisBox['2']")); //list of 8 displayboxes
Show(lub << xpath("//AxisBox[\!"2\!"]")); //list of 8 displayboxes
Show(lub << xpath("//AxisBox[charID=\!"2\!"]")); //empty list
Show(lub << xpath("//AxisBox[\!"charID=2\!"]")); //list of 8 displayboxesCome posso fare in modo che xpath restituisca solo i 4 y axisbox?
Una volta che riesco a generare i riferimenti alle caselle degli assi specifici che desidero, devo inviare il comando "Ottieni oggetto con script" come nell'esempio precedente o posso semplicemente inviare il comando "Scala" direttamente all'elenco dei riferimenti?
Ho letto la presentazione del JMP Summit e gli esempi di codice .jsl che hai fornito...molto utili.Tuttavia, la documentazione aggiuntiva è scarsa nello Scripting Index e sembra essere inesistente nella Scripting Guide.C'è più documentazione disponibile su xpath?Mi piacerebbe sapere qual è il formato per l'input.Ad esempio, cosa fa "//" all'inizio?E come devo formattare il resto dell'input per ottenere i displaybox di cui ho bisogno?
Grazie.
Ri: Invia comandi a più grafici bivariatiO molto più semplice con percorso , ispirato a una presentazione del JMP Summit che è stata appena pubblicata Qui :
Names Default To Here(1);
//Example report
Open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("example",
lub = Lineup Box(
Bivariate(Y(:weight), X(:height), FitLine()),
Bivariate(Y(:weight), X(:age), FitLine()),
Bivariate(Y(:age), X(:age), FitLine()),
Bivariate(Y(:weight), X(:weight), FitLine())
)
);
//Make list of plots
L = (lub << xpath("//LineUpBox/OutlineBox")) << get scriptable object;
// Send messages to all plots, e.g
L << show points(0);
Ri: Invia comandi a più grafici bivariatiIL mostra punti() messaggio deve essere inviato al Bivariato oggetto anziché nella sua casella di visualizzazione superiore. Da un albero di visualizzazione esistente, è possibile ottenere un riferimento all'oggetto associato tramite < .
Un esempio che illustra anche un modo per inviare messaggi a più trame:
Names Default To Here(1);
//Example report
Open("$SAMPLE_DATA/Big Class.jmp");
New Window("example",
lub = Lineup Box(
Bivariate(Y(:weight), X(:height), FitLine()),
Bivariate(Y(:weight), X(:age), FitLine()),
Bivariate(Y(:age), X(:age), FitLine()),
Bivariate(Y(:weight), X(:weight), FitLine())
)
);
//Make list of plots (here top-level Outline boxes)
L = {};
i = 1;
While(Is Scriptable(Try(lub[Outline Box(i)])),
If((lub[Outline Box(i)] << parent) << classname == "LineUpBox",
Insert Into(L, lub[Outline Box(i)] << get scriptable object)
);
i++;
);
// Send messages to all plots, e.g
L << show points(0);