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 di grafici. (Ridimensionare gli assi, rinominare gli assi, standardizzare il colore delle linee ecc ...) In media posso ottenere un file CSV al giorno, quindi voglio mettere i dati in una tabella dati JMP, eseguire lo script e avere il output grafico tutto automatizzato.
Il mio file JMP ha per impostazione predefinita i nomi dei tag come intestazioni di colonna che non sono affatto informative come legenda del grafico. Un modo 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.
Il punto in cui sono bloccato ora è come accedere al testo nella casella della legenda (ad eccezione del titolo) in modo da poterlo manipolare e modificarlo usando JSL.
Vedo che lo script generato dal costruttore di grafici parla di "Legend model" e "Level name" ma non ho avuto successo nelle numerose cose che ho provato.
Qualsiasi consiglio su questo sarebbe molto apprezzato.
Come detto, utilizzando JSL, come accedere al testo della legenda per modificarlo dal suo default?
Grazie.
ScriptingRi: Come cambiare i nomi delle legende in JSL (in Graph Builder)?I dettagli nell'Indice di script per una casella di legenda () non mostrano alcun messaggio che consenta 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 valore".Ri: Come cambiare i nomi delle legende in JSL (in Graph Builder)?Grazie per aver confermato di non essermi perso qualcosa di ovvio.
Sfortunatamente, non vedo (o non riesco a vedere) come le "Value Labels" possano fare ciò che cerco 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 semplice tabella con pochi valori nel testo nella legenda, cambia se utilizzo "Imposta nome" per una determinata colonna, ad esempio "Colonna (dt, 1) << Imposta nome (" Nuovo nome ");" Questa 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 "Media (... Nome tag ...)". Se uso << Imposta nome con i miei dati effettivi, ho ancora un testo di legenda problematico perché include "Media (... nome colonna ...)".
Sarebbe bello sapere come manipolare il testo della legenda per una determinata colonna. Forse creo semplicemente una leggenda da zero in modo che tutte le proprietà in una leggenda "autocostruita" siano accessibili e manipolabili. Vorrei che fosse qualcosa di script e non qualcosa che richiedesse attenzione manuale ogni volta che creo un nuovo grafico (probabilmente ogni giorno).
Ri: Come cambiare i nomi delle legende in JSL (in Graph Builder)?Sarebbe possibile fare qualcosa del genere negli script del tuo generatore 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 cambiare i nomi delle legende in JSL (in Graph Builder)?Grazie. Sì, certamente possibile. Immagino che avrei bisogno di una variabile per catturare il nome desiderato per il testo della legenda poiché ho in mente grafici diversi?
Ad esempio, secondo la sintassi di esempio 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 cambiare 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 Legenda nel Generatore di grafici. Il secondo numero sarà l'indice di quella legenda. A volte può essere difficile ottenere questi numeri corretti perché non sempre mostriamo tutte le leggende. Se vuoi vedere l'elenco completo delle legende vai alle Impostazioni Legenda.
Ri: Come cambiare 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 della legenda, seguo la logica della tua sintassi ma non ne vedo alcun effetto.
Nel secondo PNG vedi cosa stavo pensando di vedere dopo l'esecuzione della tua sintassi completa.
Se puoi ancora esaminarlo e fammi sapere in che modo te ne sarei molto grato. Grazie, Scott.
Ri: Come cambiare i nomi delle legende in JSL (in Graph Builder)?Mi dispiace. Questa è una nuova funzionalità di JMP 16. Non mi rendevo conto che fosse stato appena 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.