Nel Costruttore di grafici, desidero mostrare un'etichetta dati (non un'etichetta al passaggio del mouse) solo per le righe selezionate. Come demo, ho provato il seguente codice:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Try(
Show( dt:Selected Name ),
dt << New Column( "Selected Name",
Character,
Set Formula( If( Selected( Row State( Row() ) ) == 1, :name ) )
)
);
dt:Name << Label( 0 );
dt << Clear Row States << Select All Rows << Label << Clear Select;
dt:Selected Name << Label( 1 );
// The following doesn't work as expected
gb1 = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 3 ) ) ),
SendToReport(
Dispatch( {}, "Graph Builder", FrameBox,
{Marker Size( 5 ), Marker Drawing Mode( "Normal" )}
)
)
);
nw1 = New Window( "DTB", dtb1 = Data Table Box( dt ) );
dtb1 << set selectable rows();Quando seleziono una riga nella tabella dati, o dalla casella della tabella, oppure selezionando il punto dati nel Costruttore di grafici, dovrebbe mostrare l'etichetta in :Nome selezionato. Tuttavia, sembra sempre essere un punto selezionato indietro! Ad esempio, seleziono KATIE e il punto dati è evidenziato ma non è presente alcuna etichetta. Quindi se seleziono LOUISE, il punto dati per quella riga viene evidenziato, ma il punto dati per KATIE ora è etichettato!

Ma se faccio di nuovo clic su LOUISE, viene etichettato correttamente:

Infine, se deseleziono tutte le righe, l'ultima etichetta rimane visibile.
È interessante notare che, se utilizzo il codice seguente per inserire la casella di tabella e il generatore di grafici nella stessa finestra e selezionare le righe dalla casella di tabella o dal grafico del Costruttore di grafici, funziona come previsto, con l'etichetta visualizzata solo per le righe selezionate:
dt << clear select;
nw2 = New Window( "Demo",
H List Box(
dtb2 = Data Table Box( dt ),
gb2 = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 3 ) ) ),
SendToReport(
Dispatch( {}, "Graph Builder", FrameBox,
{Marker Size( 5 ), Marker Drawing Mode( "Normal" )}
)
)
)
)
);
dtb2 << set selectable rows();C'è un modo migliore per fare quello che sto tentando?
Vedo questo comportamento su JMP 17.2 e JMP 18.
@jthi ha scritto:
Non funziona con il codice che ho fornito o quando usi un'idea simile sui tuoi dati (per me funziona usando JMP17.2/JMP18.0 su Windows 10)?
La tua semplice funzione che utilizza << esegui formule non funziona per me in JMP 17.2/18.0 su Mac OS 13.6.7.
Non funziona con il codice che ho fornito o quando usi un'idea simile sui tuoi dati (per me funziona usando JMP17.2/JMP18.0 su Windows 10)?
Grazie per il suggerimento! Sfortunatamente non ha funzionato per me così com'è, ma quanto segue funziona:
f = Function({a},
rr = dt << get selected rows;
dt << clear select;
wait(0);
dt << select rows( rr );
rs = dt << Make Row State Handler(f);
);
rs = dt << Make Row State Handler(f);Tuttavia, sembra una soluzione orribile. L'istruzione Make Row State Handler all'interno della funzione sembra essere necessaria perché dopo la prima chiamata di f() il gestore viene dimenticato (non sono sicuro di capire cosa sta succedendo qui!).
Penso che potresti dover usare qualcosa per causare un piccolo ritardo. Un'opzione è il gestore dello stato della riga (possono essere molto inaffidabili) + esegui formule
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Try(
Show(dt:Selected Name),
dt << New Column("Selected Name",
Character,
Set Formula(If(Selected(Row State(Row())) == 1, :name))
)
);
dt:Name << Label(0);
dt << Clear Row States << Select All Rows << Label << Clear Select;
dt:Selected Name << Label(1);
// The following doesn't work as expected
gb1 = dt << Graph Builder(
Show Control Panel(0),
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y, Legend(3))),
SendToReport(
Dispatch({}, "Graph Builder", FrameBox, {Marker Size(5), Marker Drawing Mode("Normal")})
)
);
nw1 = New Window("DTB", dtb1 = Data Table Box(dt));
dtb1 << set selectable rows();
f = Function({a},
dt << run formulas;
);
rs = dtb1 << Make RowState Handler(f);