En JMP 11, estoy escribiendo una aplicación de trazado que permite al usuario personalizar las leyendas seleccionando la columna de agrupación que define los estados de las filas. Esto requiere eliminar la leyenda anterior (eliminando el cuadro del borde principal) y agregar una nueva leyenda. Sin embargo, he descubierto que si se establece el recalc automático en las plataformas bivariadas o de variabilidad (no probé otras plataformas), esto hará que vuelva a aparecer una copia de la antigua leyenda además de la nueva, cuando la nueva uno se genera con el comando FrameBox << Row Legend. A medida que se seleccionan más leyendas, aparecen todas las leyendas antiguas. Necesito un recálculo automático para recalcular las líneas de tendencia y las estadísticas según cómo se filtren los datos. ¿Hay una solución para esto? ¿Hay una mejor manera de eliminar la leyenda que decir BorderBox << Eliminar? Sé por la interfaz gráfica de usuario que puede hacer clic derecho y decir "Eliminar" a una leyenda ... ¿hay un comando de script equivalente para esto?
También he buscado usar el << color por columna en la tabla de datos con la opción "crear ventana con leyenda", y luego insertar la leyenda (cuadro de tabla con strincolbox child) directamente en el gráfico, pero esto hace que la leyenda pierda su funcionalidad de selección de fila y parece que no puedo volver a agregarlo (debe haber métodos ocultos para la tabla a los que no puedo acceder porque tampoco sé cómo poner marcadores en un cuadro de tabla para hacer una leyenda personalizada).
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ok, entonces se me ocurrió una solución simple: apagué el recálculo automático en el objeto de la plataforma en cuestión (usando << Obtener objeto con secuencia de comandos en la tabla seleccionada), actualicé la leyenda, luego volví a activar el recálculo automático. Lo extraño es que no pude recrear este error usando una secuencia de comandos ficticia en una bivariada con recalc automático activado y leyendas agregadas y eliminadas repetidamente.
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Así que he estado jugando mucho con él y eventualmente pude recrear este comportamiento, incluso usando uno de los conjuntos de datos integrados. El siguiente código provocará algún tipo de pérdida de memoria que hará que JMP se bloquee.
Aquí es cómo recrear el error:
(1) cree una plataforma dentro de una ventana que tenga el recalc automático establecido en 1
(2) agrega algunas leyendas
(3) excluir algunas filas
(4) agregue otra leyenda ... incluso después de eliminar una o ambas leyendas originales y JMP se congelará
El error se manifiesta como un aumento gradual del uso de memoria (~ 10 MB / s) por jmp, ya que funciona a través de una pérdida de memoria infinita.
Este error se puede evitar estableciendo el estado excluido en 0 para todas las filas de la tabla (es decir, Para cada fila (Excluido (RowState ()) = 0).
Otra peculiaridad que se activa mediante el recálculo automático es el hecho de que las leyendas no se eliminarán a menos que haya un retraso de tiempo forzado antes de eliminar la leyenda después de que se haya creado. Si la recalc. Automática se establece en 0, la eliminación se realiza sin problemas.
// código que falla
Nombres predeterminados hasta aquí (1);
Try (CLose (dt, nosave));
dt = Abrir ("$ SAMPLE_DATA / Big Class.jmp", invisible);
dt << borrar estados de fila;
obj = NewWindow ("test", biv_container = HListbox (biv = Bivariate (Y (: weight), X (: height), Automatic Recalc (1))));
/ *
data_filter_container = ScrollBox (Tamaño (200,500), data_filter = dt << Filtro de datos (Agregar filtro (columnas (: Sexo,: Edad,: Nombre,: Altura,: Peso)));
data_filter << Modo (Seleccionar (1), Mostrar (1), Incluir (1));
obj [OutlineBox ("Ajuste bivariado de peso por altura")] << Sib Prepend (data_filter_container); * /
obj [OutlineBox ("Ajuste bivariado de peso por altura")] [FrameBox (1)] << Leyenda de fila (: peso, Color (1), Marcador (0));
obj [OutlineBox ("Ajuste bivariado de peso por altura")] [FrameBox (1)] << Row Legend (: sexo, Color (0), Marcador (1));
obj [OutlineBox ("Ajuste bivariado de peso por altura")] [FrameBox (1)] << Tamaño del marcador (6);
dt << Seleccione Where (: sex == "F") << Excluir;
// Show (para cada fila (Excluded (RowState ()) = 0));
// dt << Seleccione Where (: sex == "F") << Unexclude;
wait (0.1); // retraso de tiempo forzado necesario para eliminar la leyenda de color
obj [OutlineBox ("Ajuste bivariado de peso por altura")] [BorderBox (2)] << Eliminar;
obj [OutlineBox ("Ajuste bivariado de peso por altura")] [FrameBox (1)] << Leyenda de fila (: altura, Color (1), Marcador (0));
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Oh, lo que finalmente terminé haciendo es usar la función dt << Make Rowstate Handler para manejar eventos de cambio de rowstate, característica muy útil. Siempre que cambia el estado excluido, elimino una función para actualizar mis gráficos.