Quando si utilizza il generatore di grafici, consente di "evidenziare" o "selezionare" un sottoinsieme di dati specifico all'interno della legenda. Anche l'output corrispondente sul costruttore di grafici e sulla tabella dati verrà evidenziato. Quando viene selezionato un sottoinsieme di dati, gli altri sottoinsiemi passano in secondo piano o aumentano la loro trasparenza in modo interattivo.
Posso aggiungere linee di riferimento che corrispondono a un set di dati selezionato che si comportino in modo interattivo allo stesso modo? E posso fare in modo che queste linee si colorino automaticamente come fanno quando trascino una colonna nominale nel campo della legenda?
Indicizzazione dell'elenco tramite
["addrefline"]
- bel trucco 
Perché funziona?
Trova il primo simbolo (indipendente da maiuscole/minuscole e spazi) e restituisce il primo argomento?
Ecco alcuni JSL iniziali.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
oldselection = [];// don't update when nothing changes by comparing old to new
f = Function( {a}, // this callback tells which points are changing selected state
// and may send between 1 and N row numbers in the matrix a.
// this example will ignore a and just ask the table about the range of the currently
// selected points.
{subset, hmin, hmax, wmin, wmax, newselection}, // local variables
newselection = dt << getselectedrows; // compare to previous selection...
If( Try( N Rows( newselection ) != N Rows( oldselection ) | Any( newselection != oldselection ), 1 ),
oldselection = newselection; // remember the new selection for next time
dtSubset = dt << subset( SelctedRows( 1 ), LinkToOriginalDataTable( 1 ), invisible ); // make a subset of the selection to summarize
dtSummary = dtSubset << Summary( Min( :height ), Min( :weight ), Max( :height ), Max( :weight ), Freq( "None" ), Weight( "None" ) );
Close( dtSubset, "nosave" ); // done with the subset, use the summary...
hmin = dtSummary:name( "Min(Height)" )[1]; // capture the range of the selected axis
hmax = dtSummary:name( "Max(Height)" )[1];
wmin = dtSummary:name( "Min(Weight)" )[1];
wmax = dtSummary:name( "Max(Weight)" )[1];
Close( dtSummary, "nosave" ); // done with the summary, use the captured values...
// remove 2 old reflines first, from each axis, then add 2 new ones
// remove the old ref lines from the weight axis (1==horizontal)
Report( gb )[axisbox( 1 )] << removerefline( (Report( gb )[axisbox( 1 )] << getscript)["addrefline"] );
Report( gb )[axisbox( 1 )] << removerefline( (Report( gb )[axisbox( 1 )] << getscript)["addrefline"] );
// remove the old ref lines from the height axis (2==vertical)
Report( gb )[axisbox( 2 )] << removerefline( (Report( gb )[axisbox( 2 )] << getscript)["addrefline"] );
Report( gb )[axisbox( 2 )] << removerefline( (Report( gb )[axisbox( 2 )] << getscript)["addrefline"] );
// add the new ref lines...extend the bounding box by .5 for the integer height/weight (not required)
Report( gb )[axisbox( 1 )] << addrefline( wmin - .5, "solid", "red", "a", 2 );
Report( gb )[axisbox( 1 )] << addrefline( wmax + .5, "solid", "green", "b", 2 );
Report( gb )[axisbox( 2 )] << addrefline( hmin - .5, "solid", "blue", "c", 1 );
Report( gb )[axisbox( 2 )] << addrefline( hmax + .5, "solid", "black", "d", 1 );
);
);
rs = dt << make row state handler( f );
gb = Graph Builder(
Size( 416, 300 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 3 ) ) ),
SendToReport( Dispatch( {}, "Graph Builder", OutlineBox, {Set Title( "" )} ), Dispatch( {}, "graph title", TextEditBox, {Set Text( "Demo" )} ) )
);
La JSL installa una funzione del gestore RowState nella tabella dati; tale funzione viene avvisata quando i dati sullo stato della riga della tabella cambiano (quando una riga viene selezionata/nascosta/esclusa o lo stile o il colore dell'indicatore cambia). La funzione calcola i valori minimo e massimo delle colonne selezionate e rimuove le vecchie linee di riferimento e aggiunge nuove linee di riferimento.
The a-b-c-d ref lines are interactively tracking the rectangular point selectionLe linee di riferimento abcd seguono in modo interattivo la selezione del punto rettangolare
Lampeggia mentre si aggiorna perché il display si ridisegna quando ogni linea di riferimento viene aggiunta o rimossa; potrebbe diventare troppo lento con dati di grandi dimensioni e impiegare troppo tempo per ridisegnare il grafico.