En Graph Builder, quiero mostrar una etiqueta de datos (no una etiqueta flotante) solo para las filas seleccionadas. Como demostración, probé el siguiente código:
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();Cuando selecciono una fila en la tabla de datos, o en el cuadro de la tabla, o seleccionando el punto de datos en Graph Builder, debería mostrar la etiqueta en: Nombre seleccionado. ¡Sin embargo, siempre parece estar un punto por detrás! Por ejemplo, selecciono KATIE y el punto de datos está resaltado pero no hay etiqueta. Luego, si selecciono LOUISE, el punto de datos para esa fila se resalta, ¡pero el punto de datos para KATIE ahora está etiquetado!

Pero si vuelvo a hacer clic en LOUISE, aparece la etiqueta correcta:

Finalmente, si anulo la selección de todas las filas, la última etiqueta permanece visible.
Curiosamente, si uso el siguiente código para colocar el cuadro de tabla y el generador de gráficos en la misma ventana, y selecciono filas del cuadro de tabla o del gráfico del Generador de gráficos, funciona como se esperaba, y la etiqueta solo se muestra para las filas seleccionadas:
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();¿Existe una mejor manera de hacer lo que estoy intentando?
Veo este comportamiento en JMP 17.2 y JMP 18.
@jthi escribió:
¿No funciona con el código que proporcioné o cuando uso una idea similar en sus datos (para mí funciona usando JMP17.2/JMP18.0 en Windows 10)?
Su función simple que usa << ejecutar fórmulas no me funciona en JMP 17.2/18.0 en Mac OS 13.6.7.
¿No funciona con el código que proporcioné o cuando uso una idea similar en sus datos (para mí funciona usando JMP17.2/JMP18.0 en Windows 10)?
¡Gracias por la sugerencia! Desafortunadamente, no funcionó para mí tal como está, pero lo siguiente sí:
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);Sin embargo, parece una solución horrible. La declaración Make Row State Handler dentro de la función parece ser necesaria porque después de la primera llamada de f() el controlador se olvida (¡no estoy seguro de entender lo que está sucediendo aquí!).
Creo que quizás tengas que usar algo para causar un pequeño retraso. Una opción es el controlador de estado de fila (pueden ser muy poco confiables) + ejecutar fórmulas
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);