Costruttore di grafici, come modificare il colore di un elemento e informazioni sulla sintassi di SendToReportCiao,
Creo un grafico con contenuto dinamico (il numero di variabili è determinato in fase di esecuzione).
Vorrei cambiare per cambiare diverse cose dopo aver impostato il generatore di grafici, ad esempio assegnare un nuovo colore. Il motivo per farlo in seguito è perché non conosco le modifiche prima di eseguire altre parti del mio script che non posso eseguire prima.
Ho semplificato il mio problema di base in questo esempio:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = Graph Builder(
Automatic Recalc( 0 ),
Variables( X( :age ), Y( :height ) ),
Elements( Points( X, Y ), Smoother( X, Y ) )
);
// do some other stuff incl. addition or removal of variables to gb
// how do I *MODIFY* the color of Points, Smoother here or add a Line Plot?
Conosco la posizione delle variabili nel grafico se questo aiuta (1,1 nell'esempio sopra).
Saluti,
Alex
Re: come cambiare il colore di una lineaCiao Alex,
Ci scusiamo per il ritardo nella risposta.
Supponiamo che tu abbia inviato il seguente messaggio Legend Model.
Legend Model( 2, Properties( 1, {Line Color( 4 )} ) )
- Il primo argomento (2) è un ID univoco che fa riferimento a uno specifico modello di legenda all'interno di ScaleBox. Nell'esempio precedente, un valore di 1 farebbe riferimento al modello di legenda contenente i punti, mentre un valore di 2 indica le linee più morbide.
- Il secondo argomento (Properties( 1, {Line Color( 4 )} )) contiene informazioni su quale elemento all'interno del Legend Model applicare un determinato insieme di proprietà.
- Il primo argomento all'interno di Properties (1) è un numero di elemento in base zero per identificare quale elemento applicare la nuova proprietà.
- Il secondo argomento all'interno di Properties ({Line Color( 4 )}) è un elenco di proprietà da applicare a un determinato elemento del modello di legenda. In questo caso, stiamo cambiando il colore della linea in verde.
Ecco alcuni esempi:
Lo script seguente imposta il primo elemento nel primo modello di legenda (punti) in verde. In questo caso, il primo elemento è "F."
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Grid Transparency( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model( 1, Properties( 0, {Line Color( 4 )} ) )}
)
)
);
(Da qui in avanti, darò solo la parte del modello di legenda da sostituire nello script sopra)
Il seguente frammento del modello di legenda cambierà il colore del secondo elemento ("M") all'interno del modello di legenda dei punti.
Legend Model( 1, Properties( 1, {Line Color( 4 )} ) )
Il seguente frammento di Legend Model cambierà il colore del primo elemento ("F") all'interno del modello di legenda della linea più uniforme.
Legend Model( 2, Properties( 0, {Line Color( 4 )} ) )
Il seguente frammento del modello di legenda cambierà il colore del secondo elemento ("M") all'interno del modello di legenda della linea più uniforme.
Legend Model( 2, Properties( 1, {Line Color( 4 )} ) )
NOTA: la modifica del colore della linea della linea più liscia cambierà anche il colore dei punti corrispondenti, ma la modifica del colore dei punti non influisce sul colore della linea più liscia associata.
Re: come cambiare il colore di una lineaGrazie per il feedback.
Potresti spiegare anche la sintassi del modello di legenda?
Re: come cambiare il colore di una lineaLa sintassi per l'argomento SendToReport è la seguente (da Scripting Index):
SendToReport( Dispatch( "Outline name", "Element name", Element type, command );
Il secondo argomento nel comando dispatch ("Element Name") viene usato come identificatore per trovare il DisplayBox corretto. Ad esempio, questo argomento corrisponderebbe all'attributo "helpKey" quando si utilizza un comando Dispatch per un FrameBox. L'argomento del tipo di elemento indica a JMP quale tipo di attributo cercare (poiché è diverso per i diversi DisplayBox).
Per uno ScaleBox (come necessario in questo caso), l'argomento del nome dell'elemento fa riferimento all'attributo "charID". Graph Builder crea più ScaleBox per vari scopi, ma il charID di "400" viene assegnato allo ScaleBox necessario per l'invio di messaggi come Legend Model.
Di seguito è riportato un estratto dell'XML per un Graph Builder (creato utilizzando gli script più in basso) che mostra i cinque ScaleBox che sono stati creati. Noterai che una delle scale box ha un charID di "400", che è la scale box che dobbiamo usare per il messaggio Legend Model.
<..truncated..>
<..truncated..>
<..truncated..>
Un altro modo per avvicinarsi all'utilizzo del messaggio Legend Model è inviarlo direttamente a questo ScaleBox. Un modo per fare riferimento a questo ScaleBox è usare XPath come mostrato di seguito. Questo metodo fa riferimento a ScaleBox con charID "400".
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Grid Transparency( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
scalebox = gb << xpath("//ScaleBox[@charID=\!"400\!"]");
scalebox << Legend Model( 2, Properties( 1, {Line Color( 4 )} ) );
Lo script seguente fa la stessa cosa, ma utilizza invece il metodo SendToReport.
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Grid Transparency( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model( 2, Properties( 1, {Line Color( 4 )} ) )}
)
)
);
Grazie,
Re: come cambiare il colore di una lineaQuesta è una grande richiesta per lo sviluppo di JMP, in particolare per documentare il funzionamento interno del costruttore di grafici.
Re: come cambiare il colore di una lineaFaccio lo stesso ma ora che vedo il codice generato, devo essere in grado di capirlo.
Non sono riuscito a trovare documentazione per Legend Model e nemmeno per "400".
Ecco perché stavo chiedendo aiuto e apprezzerei molto il feedback.
Re: come cambiare il colore di una lineaNon tutta la sintassi "interna" del generatore di grafici è documentata. Quando si tratta di GB, faccio quanto segue:
Crea un grafico che assomigli esattamente a quello che voglio, inclusi tipo di grafico, simboli, colori, linee, ecc.
Fare clic sul piccolo triangolo rosso per ottenere il codice JSL
Incorpora il codice JSL nel mio script
Fondamentalmente lascio che GB faccia il lavoro pesante e poi uso il codice che genera.
Re: come cambiare il colore di una lineaCiao Ian,
grazie per il grande esempio.
Potresti indicarmi la parte della guida allo scripting che contiene informazioni sulla sintassi del modello di legenda, il significato del valore "400"?
Ho cercato le parole "modello leggendario" - nessun risultato. 400 ha avuto diversi riscontri ma non sono riuscito a identificare qualcosa di rilevante.
Grazie per l'aiuto!
Saluti,
Alex
Re: come cambiare il colore di una lineaBasta farlo in modo interattivo, quindi esaminare il codice che JMP genera per te. Adattando il tuo esempio:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = Graph Builder(
Automatic Recalc( 0 ),
Variables( X( :age ), Y( :height ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
// Add 'weight'
Wait(2);
gbb = Report( gb )[Graph Builder Box( 1 )];
upper_graph_inner_pos = 2;
gbb << Add Variable({Column( "weight" ), Role( "Y" ), Position( 1 ), Inner Position( upper_graph_inner_pos )});
// Change the colour of the points and smoother for 'weight' to green
Wait(2);
gb << SendToReport( Dispatch({}, "400", ScaleBox, {Legend Model( 2, Properties( 1, {Line Color( 4 )} ) )} ) );
Per quanto riguarda la domanda meno importante, puoi cercare in "Aiuto > Libri > Guida allo scripting" che spesso fornisce alcuni suggerimenti.
Re: come cambiare il colore di una lineaHo avuto domande simili ma non ho mai avuto risposte. Sembra che l'esperto di JMP in questo forum eviti questa domanda o non incoraggi l'utente di JMP a conoscerlo più a fondo.
Re: come cambiare il colore di una lineaecco un esempio migliore. come faccio a cambiare il colore dei punti e lo smoother per il peso in questo?
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = Graph Builder(
Automatic Recalc( 0 ),
Variables( X( :age ), Y( :height ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
gbb = Report( gb )[Graph Builder Box( 1 )];
upper_graph_inner_pos = 2;
gbb << Add Variable(
{Column( "weight" ), Role( "Y" ), Position( 1 ), Inner Position( upper_graph_inner_pos )}
);
gb << SendToReport(
Dispatch( {}, "400", ScaleBox, {Legend Model( 1, Properties( 0, {Line Color( RGB color(31,119,180) ), Fill Color( 0 )} ) )} )
);
domande meno importanti:
Cosa significa "400" in questo contesto?
Re: come cambiare il colore di una lineaCiao @Justin_Chilton , quali identificatori aggiuntivi vengono utilizzati per i nomi degli elementi oltre a helpKey e charID ?
Quando cambio un'etichetta di asse, il codice JSL legge
gb << SendToReport( Dispatch( {}, "<STRONG>X Title</STRONG>", TextEditBox, {Set Text( "new" )} ))... ma il titolo X non viene visualizzato nel codice XML dell'albero Display. Quale identificatore è?
Parlare con le scatole di visualizzazione