¿Crear un subconjunto a partir de un gráfico interactivo?Hola. Estoy tratando de hacer un gráfico interactivo para mostrar datos de una tabla de resumen. El objetivo es crear un gráfico de líneas con puntos en los que se puede hacer clic para crear un subconjunto de datos de ese punto en particular. Por ejemplo, en el siguiente script, tengo un gráfico de una tabla de resumen por edad de la tabla de muestra Big Class. El usuario debería poder hacer clic en un punto del gráfico y hacer que se abra automáticamente una tabla de subconjuntos que contenga todos los datos de ese punto.
El problema al que me estoy enfrentando es que un solo clic no funcionará porque no se han seleccionado datos. El usuario debe hacer doble clic en un punto para seleccionar los datos, luego hacer clic nuevamente para ejecutar la expresión del subconjunto. ¿Hay alguna manera de hacer esto sin tener que hacer triple clic? Gracias.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dtSummary = dt << Summary(
Group( :age ),
Freq( "None" ),
Weight( "None" ),
output table name( "dtSummary" )
);
gbExpr = Expr(
gb = Graph Builder(
Size( 528, 448 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( :N Rows ) ),
Elements( Points( X, Y, Legend( 3 ) ), Line( X, Y, Legend( 4 ) ) ),
SendToReport(
Dispatch(
{},
"400",
LegendBox,
{Legend Position( {3, [-1], 4, [-1]} ), Position( {-1, -1} )}
)
)
);
);
ExprA = Expr(
dtSubset = dt << Subset( Output Table( "Subset" ), Selected Rows( 1 ), Selected Columns( 0 ));
dtSummary << Clear Selected Rows;
);
GraphWindow = New Window( "Graph" );
GraphWindow << Append(
MouseBox(
gbExpr,
<<SETCLICKENABLE></SETCLICKENABLE>Re: ¿Crear un subconjunto a partir de un gráfico interactivo?En JMP 15.0, se agregó una opción de menú RMB de subconjunto a las etiquetas flotantes que hacen exactamente lo que describiste.
Ahora todos los gráficos vienen con esta funcionalidad incorporada.
Lo acabo de probar y los resultados son exactamente los mismos que al ejecutar su script.
Tenga en cuenta que no es necesario crear una tabla de resumen separada: la nueva función "entiende" las agregaciones realizadas por gráficos como gráficos de líneas, gráficos de barras, etc.
En otras palabras, el subconjunto se basa en un filtro de datos local que se deriva de la definición del elemento visual bajo el puntero.
Esta técnica también admite la creación de graphlets y su lanzamiento en nuevas ventanas (también conocido como desglose).
Para más detalles, consulte https://www.jmp.com/content/dam/jmp/documents/en/support/jmp15/using-jmp.pdf , página 512.

Re: ¿Crear un subconjunto a partir de un gráfico interactivo?Una alternativa a un cuadro de ratón es aplicar un controlador de estado de fila a la tabla de datos. Se necesita un clic para crear el subconjunto (lo que puede ser molesto si intenta seleccionar varios puntos arrastrándolos, ya que se pueden crear muchos subconjuntos no deseados).
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dtSummary = dt << Summary(Group(:age));
gbExpr = Expr(
gb = Graph Builder(
Show Control Panel(0),
Variables(X(:age), Y(:N Rows)),
Elements(Points(X, Y, Legend(3)), Line(X, Y, Legend(4)))
)
);
ExprA = Expr(
dtSubset = dt << Subset(Selected Rows(1));
dtSummary << Clear Select;
);
f = Function({a}, ExprA);
rs = dt << make row state handler(f);
GraphWindow = New Window("Graph", gbExpr);
Re: ¿Crear un subconjunto a partir de un gráfico interactivo?Perfecto. Muy útil.Muchas gracias.
Re: ¿Crear un subconjunto a partir de un gráfico interactivo?Mientras hace todo el trabajo para crear una secuencia de comandos que use trampas de mouse, creo que puede lograr lo que desea con una secuencia de comandos muy simple, si está dispuesto a usar las acciones predeterminadas del mouse para seleccionar los puntos de datos y luego simplemente hacer clic en un botón añadido para hacer la selección

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
gb = dt << Graph Builder(
Size( 528, 454 ),
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 6 ) ), Smoother( X, Y, Legend( 7 ) ) )
);
subsetButton = Button Box( "Click to Create a Subset of Selected Points",
If( N Rows( dt << get selected rows ) > 0,
dt << subset( selected rows( 1 ), selected columns( 0 ) )
)
);
Report( gb )["Graph Builder"] << append( subsetButton );