Tengo un caso de uso para crear un gráfico que tendrá una capacidad de desglose.
El usuario hará clic en un punto del gráfico y, utilizando la función Mousetrap(), se ejecutará un script que abrirá una nueva ventana que contiene otro gráfico con información más detallada.
Luego quiero admitir un nivel adicional de desglose desde esta primera ventana emergente.
Ilustraré con un ejemplo simple usando el conjunto de datos BigClass en el script adjunto.
Las notas en el script resaltan el problema: con solo una llamada a la función mouse-trap(), el primer desglose funciona.
Pero si agrego una segunda trampa para ratones, específicamente agregándola al gráfico que resultará del primer desglose, lo que sucede es que la segunda acción de desglose se aplica al primer clic del mouse, lo cual no se esperaba. .
¿No está seguro de si es posible usar MouseTrap() así o no?
d
@Mark_Bailey gracias por la referencia a graphlets!
@tsl por lo que desea profundizar en varios niveles. Muy bien, esta es una excelente manera de aprender sobre sus datos utilizando la visualización de datos para reducir su enfoque.
Contemos las formas en que puede hacerlo en JMP15 usando grafos. Esta nueva característica sigue una arquitectura de "porcelana + plomería", lo que significa que hay formas predefinidas y fáciles de usar para lograr un comportamiento estándar, construidas sobre una API de programación (JSL) a la que también puede acceder para implementar casos personalizados. El escenario que describió se puede implementar utilizando dos enfoques diferentes de "porcelana" o de apuntar y hacer clic.
Si su atención se centra en una medida única y particular, por ejemplo, la altura, puede utilizar un ajuste preestablecido de Graphlet como el histograma. Después de crear su gráfico de referencia, haga clic con el botón derecho del mouse en el fondo del gráfico para acceder al nuevo menú "Etiqueta flotante". Desde ahí verás las opciones preestablecidas

Un ajuste preestablecido de graflet creará un graflet del tipo de visualización indicado, derivando el mapeo de funciones de las variables seleccionadas en el gráfico de referencia. Dado que el gráfico de línea de base muestra recuentos de las variables de altura, el gráfico de histograma preestablecido mostrará automáticamente la distribución de esa variable para cada barra dada.Pero cada barra ya se filtra a un solo valor de altura, por lo que no es una distribución interesante. Digamos que nuestra línea de base fue un histograma en su lugar; un preajuste de histograma mostraría la distribución de los valores en cada contenedor:

Observe cómo la miniatura de la etiqueta flotante actúa como una vista previa del gráfico. Si continúa y hace clic en la imagen en miniatura, se iniciará el gráfico equivalente en una nueva ventana. Este nuevo gráfico se filtra hacia abajo para incluir solo las filas correspondientes al elemento visual sobre el que se pasa el mouse (en este caso, el contenedor 60-62), implementando la operación de desglose. La operación de filtro se implementa mediante un filtro de datos locales colapsado, lo que lo hace resistente a los cambios de selección no relacionados y permite una mayor exploración a través de cambios en la configuración del filtro.

Otra característica de los ajustes preestablecidos de Graphlet es que están preconfigurados para ser recursivos, a fin de admitir escenarios avanzados de desglose. Entonces puede seguir adelante e interactuar con los contenedores en el nuevo histograma. Verá que también puede profundizar en ellos:

Ahora, el ejemplo .jsl adjunto a la página tenía un escenario de desglose más complejo, donde los tipos de visualización y las asignaciones de roles se eligieron para valores específicos en cada nivel de desglose:
* Nivel 0 (línea de base): el valor de la altura cuenta
* Nivel 1: diagrama de caja de peso por sexo
* Nivel 2: detalles de la fila que se muestran en el registro
Este nivel de personalización aún se puede lograr usando un tipo diferente de "porcelana": el comando Pegar Graphlet. Este comando permite al usuario "apilar" definiciones de graflets, que se utilizarán cuando el usuario profundice en los elementos visuales de cada nivel.
Entonces, después de crear el gráfico de referencia, continúe y cree gráficos que representen cada uno de los niveles de desglose deseados. No se preocupe por filtrar, como en el caso anterior, eso se hará automáticamente. Entonces - comenzando con el ultimo level - copie su script en el portapapeles:

Luego muévase al gráfico anterior y luego pegue (el script como un) gráfico:

En las imágenes de arriba, pegamos el gráfico detallado de nivel 1 (el gráfico de peso por sexo) en el gráfico de referencia. El resultado:

Como se definió este escenario, no hubo necesidad de un graflet de pasta de nivel 2. Mostrar los valores de fila para el elemento visual sobre el que se desplaza ya es el comportamiento predeterminado para las etiquetas de desplazamiento. Esto es lo que veríamos en un desglose de segundo nivel, después de pasar el cursor sobre el segundo diagrama de caja:

Al hacer clic con el botón derecho del mouse en la etiqueta flotante, el usuario puede copiar su contenido, crear subconjuntos de datos o cambiar aún más la configuración de la etiqueta flotante.
Espero que esto haya sido útil. Para ver un ejemplo de desglose categórico, verifique la respuesta a https://community.jmp.com/t5/Discussions/drill-down-in-a-graph-hierarchy/mp/11702
Puede encontrar más información sobre las personalizaciones de Hover Label en: https://www.jmp.com/support/help/en/15.0/index.shtml#page/jmp/add-hover-graphs.shtml#
La información sobre graphlets específicamente está en: https://www.jmp.com/support/help/en/15.0/index.shtml#page/jmp/add-graphs-or-images-to-hover-labels.s...
¡Buena idea! Mueve tu código a una función y funciona:
makesubset = Function( {_x},
{TestWin}, // local variables
dt << select where( :height == _x );
TestWin = New Window( "Drill Down Window",
dt << GraphBuilder( Size( 534, 448 ), Show Control Panel( 0 ),
Where( Selected() ), Variables( X( :sex ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 4 ) ), Box Plot( X, Y, Legend( 5 ) ) )
)
);
TestWin[FrameBox( 1 )] << add graphics script(
Mousetrap(
_x2 = Round( X, 0 );
Show( _x2 );
)
);
);
dt = Open( "$sample_data/big class.jmp" );
dt << Graph Builder( Size( 527, 454 ), Show Control Panel( 0 ),
Variables( X( :height ) ), Elements( Bar( X, Legend( 6 ) ) ),
SendToReport( Dispatch( {}, "Graph Builder", FrameBox,
{Add Graphics Script( 2, Description( "Script" ),
Mousetrap(
_x = Round( X, 0 );
makesubset( _x );
)
), Grid Line Order( 1 ), Reference Line Order( 3 )}
)
)
);Se comporta de la manera que describe porque la función Mousetrap no se ejecuta realmente como otras funciones. El método <
Sospecho que mantiene el último. El escaneo no seguirá a la llamada de función, y la llamada de función puede hacer que su JSL sea más fácil de leer y mantener.
@EvanMcCorkle Sí, parece extraño que encuentre una trampa para ratones dentro de una trampa para ratones.
JMP 15 introdujo 'etiquetas flotantes' exactamente para este propósito. Hay tres aspectos que trabajan juntos: graphlets, textlets y gridlets.
Consulte Ayuda > Biblioteca de documentación de JMP > Guía de secuencias de comandos > Capítulo 9: Informes de JMP, página 512. Hay muchas explicaciones y ejemplos para aprender a implementar comportamientos de profundización.