Come modificare i nomi delle legende in JSL (in Graph Builder)?Ottengo molti dati in un file CSV (molte colonne, molte righe) e sto lavorando su un modello di base in JSL per standardizzare la generazione dei grafici. (Ridimensionare gli assi, rinominare gli assi, standardizzare il colore delle linee ecc...) In media posso ottenere un file CSV al giorno, quindi voglio inserire i dati in una tabella di dati JMP, eseguire lo script e fare in modo che l'output del grafico sia completamente automatizzato.
Il mio file JMP ha per impostazione predefinita i nomi dei tag come intestazioni di colonna che non sono affatto informativi come legenda del grafico. Un modo per aggirare potrebbe essere quello di rinominare tutte le colonne, ma preferirei mantenere i nomi dei tag e quindi manipolare direttamente il testo nelle impostazioni della legenda. (Ma fatto con JSL, non manualmente.)
Posso accedere facilmente alla casella della legenda, ad esempio:
gbR = gb << Report; // gbR << Show Tree Structure;
s = gbR[legendbox(1)];
s << Set Title("new title");Nel PNG allegato vedi l'idea.
Dove sono ora bloccato è come accedere al testo nella casella della legenda (ad eccezione del titolo) in modo da poterlo manipolare e modificarlo utilizzando JSL.
Vedo che lo script generato da graph builder parla di "Legend model" e "Level name" ma non ho avuto successo nelle numerose cose che ho provato.
Qualsiasi guida su questo sarebbe molto apprezzata.
Come detto, usando JSL, come accedere al testo della legenda per cambiarlo dal suo valore predefinito?
Grazie.
Personalizzazione di massaRi: Come modificare i nomi delle legende in JSL (in Graph Builder)?Possa questo script di forza bruta da @txnelson potrebbe aiutarti a fare una cosa simile per il testo dell'elemento di livello. Lo script in quel thread parla di non mostrare determinati elementi leggendari, ma potresti utilizzare una strategia simile all'interno dell'espressione per gli elementi di livello.
Ri: Come modificare i nomi delle legende in JSL (in Graph Builder)?Penso che tu debba farlo esattamente in quel modo (usando le espressioni) se vuoi farlo con lo scripting. Potresti voler salvare lo script del grafico, analizzare il nome del livello inserito tra parentesi ed estrarlo e sostituirlo. Quindi ripopola/riesegui lo script modificato. In questo modo sarai in grado di avere uno script molto generale che reagisce su cosa c'è da cambiare piuttosto che definire manualmente ogni volta per ogni scenario. Tuttavia, è più lavoro da fare.
Sembra che le proprietà della legenda disponibili non abbiano il testo come proprietà:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = dt << Graph Builder(
Variables( X( :age ), Y( :height ), Y( :weight, Position( 1 ) ) ),
Elements( Line( X, Y( 1 ), Y( 2 ), Legend( 4 ) ) )
);
r = Report( gb )[LegendBox( 1 )];
r << get properties();
/*
["Background Color" => 2147483647,
"Border" => {Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}, "Enabled" => 1,
"Horizontal Alignment" => "Default",
"Margin" => {Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}, "Padding" => {Left( 0 ),
Top( 0 ), Right( 0 ), Bottom( 0 )}, "Text Color" => 2147483647,
"Vertical Alignment" => "Default",
"Visibility" => "Visible"]
*/
E se usi
r << legend settings
otterrai una finestra che blocca qualsiasi azione in JMP fino a quando non premi il pulsante ok/annulla. Pertanto non è possibile accedere alla parte interna di quella finestra. Un'altra cosa che accresce il mio dubbio che ciò sia possibile è che la struttura ad albero della legenda mostra ancora "Mean(...)" indipendentemente dal fatto che uno l'abbia modificata manualmente o meno. Quindi sembra che ci sia qualcosa di nascosto posizionato sopra l'etichetta iniziale. O qualsiasi altra ragione...
Si prega di aggiungere un Lista dei desideri commento quindi la modifica del testo della legenda è modificabile con JSL. inoltre potresti volerlo inviare anche al supporto tecnico ( support@jmp.com ). Si prega di non dimenticare di spiegare perché, in quanto ciò aumenta la possibilità di ottenere una priorità più alta. Grazie
Ri: Come modificare i nomi delle legende in JSL (in Graph Builder)?Mi dispiace. Questa è una nuova funzione di JMP 16. Non mi ero reso conto che fosse appena stato aggiunto e non fosse disponibile in JMP 15. Dovrai provare il primo metodo fino a quando JMP 16 non sarà disponibile. Ancora una volta, mi scuso per la disinformazione.
Ri: Come modificare i nomi delle legende in JSL (in Graph Builder)?Caro Paul,
Nel PNG allegato puoi vedere l'output del generatore di grafici che ottengo eseguendo la sintassi con e senza
lgnd = gb << Get Legend Display;
item1 = lgnd << Get Item( 4, 1 );
item1 << Set Label("Line 1");
item2 = lgnd << Get Item( 4, 2 );
item2 << Set Label("Line 2");Non vedo differenze nel testo per la legenda, seguo la logica della tua sintassi ma non ne vedo alcun effetto.
Nel secondo PNG puoi vedere cosa stavo pensando di vedere dopo l'esecuzione della tua sintassi completa.
Se puoi ancora esaminare questo e farmi sapere un modo te ne sarei molto grato. Grazie, Scott.
Ri: Come modificare i nomi delle legende in JSL (in Graph Builder)?Questa è un'altra possibilità:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = dt << Graph Builder(
Variables( X( :age ), Y( :height ), Y( :weight, Position( 1 ) ) ),
Elements( Line( X, Y( 1 ), Y( 2 ), Legend( 4 ) ) )
);
lgnd = gb << Get Legend Display;
item1 = lgnd << Get Item( 4, 1 );
item1 << Set Label("Line 1");
item2 = lgnd << Get Item( 4, 2 );
item2 << Set Label("Line 2");
Il primo numero in Ottieni elemento è il valore del parametro Legend in Generatore di grafici. Il secondo numero sarà l'indice di quella legenda. A volte può essere complicato ottenere questi numeri corretti perché non sempre mostriamo tutte le leggende. Se vuoi vedere l'elenco completo delle legende vai su Impostazioni legenda.
Ri: Come modificare i nomi delle legende in JSL (in Graph Builder)?Grazie. Sì, certamente possibile. Immagino che avrei bisogno di una variabile per acquisire il nome desiderato per il testo della legenda poiché ho in mente diversi grafici?
Ad esempio, come per esempio la sintassi di Graph Builder:
_Legend1 = "abcd";
_Legend2 = "efgh";
In tal caso, dovrei utilizzare quanto segue per gestire l'uso di una variabile?
Eval(
Substitute(
Expr(
Infine, questa opzione è probabilmente l'unico modo per ottenere una manipolazione più "diretta" del testo della legenda?
Ri: Come modificare i nomi delle legende in JSL (in Graph Builder)?Sarebbe possibile fare qualcosa di simile nei tuoi script di creazione di grafici:
Graph Builder(
Variables( X( :age ), Y( :height ), Y( :weight, Position( 1 ) ) ),
Elements( Line( X, Y( 1 ), Y( 2 ), Legend( 4 ) ) ),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
4,
Level Name( 0, "abcd", Item ID( "Mean(height)", 1 ) ),
Level Name( 1, "efgh", Item ID( "Mean(weight)", 1 ) )
)}
),
Dispatch( {}, "400", LegendBox, {Set Title( "My Title" )} )
)
);Ri: Come modificare i nomi delle legende in JSL (in Graph Builder)?Grazie per aver confermato che non mi sono perso qualcosa di ovvio.
Sfortunatamente, non vedo (o non sono in grado di vedere) come le “Etichette di valore” possano fare ciò che sto cercando di ottenere. Il mio scopo, in un modo o nell'altro, è modificare efficacemente il nome della colonna, non manipolare i valori dei dati che si trovano nelle righe sotto il titolo della colonna.
Se creo una tabella semplice con pochi valori nel testo nella legenda cambia se uso "Set Name" per una determinata colonna, ad esempio "Column(dt, 1) << Set Name("New name");" Questa singola riga di sintassi fa sì che il testo per i dati della colonna 1 si aggiorni e diventi "Nuovo nome".
Il grafico dei miei dati effettivi ha testi di legenda del tipo "Mean(...Nome tag...)". Se uso << Imposta nome con i miei dati effettivi, ho ancora un testo di legenda problematico perché include "Mean (... nome colonna ...)".
Qualsiasi idea su come manipolare il testo della legenda per una determinata colonna sarebbe interessante da sapere. Forse creo solo una leggenda da zero in modo che tutte le proprietà in una tale leggenda "fatta da te" siano accessibili e manipolabili. Vorrei che fosse qualcosa di scritto e non qualcosa che richiedesse attenzione manuale ogni volta che creo un nuovo grafico (probabilmente ogni giorno).
Ri: Come modificare i nomi delle legende in JSL (in Graph Builder)?I dettagli nell'indice di scripting per una Legend Box() non mostrano alcun messaggio che consente la modifica delle etichette effettive in una legenda. Tuttavia, poiché i valori nella legenda provengono direttamente dai valori nella tabella dati, puoi semplicemente modificare/ricodificare i valori nella tabella dati o impostare la proprietà della colonna "Etichette valori".