Necesito ayuda para solucionar problemas con el script gráfico: "El script gráfico reportó errores en el registro".Necesito ayuda para entender cómo hacer referencia a los ejes de un framebox desde un script gráfico.
Esto es lo que tengo ahora:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
ob_group = Outline Box( "Testing Handles: " || (dt << Get Name) );
nw = New Window( (dt << get name), ob_group );
GB_wHandle = Function( {dt, X_parameter, Y_Parameter, groupByColumnString},
groupByColumn = Column( dt, groupByColumnString );
cb = Context Box(
box:exx = 60;
box:exy = 60;
box:gb = Graph Builder(
Size( 450, 350 ),
Ignore Platform Preferences( 1 ),
Show Control Panel( 0 ),
Variables( X( Column( X_Parameter ) ), Y( Column( Y_Parameter ) ), Overlay( groupByColumn ) ),
Elements( Points( X, Y ), Smoother( X, Y ) )
);
box:rgb = box:gb << Report;
box:framebox = box:rgb << XPATH( "//FrameBox" );
box:axis = box:rgb << XPATH( "//AxisBox" );
box:axisMax = box:axis << Get Max;
box:axisMin = box:axis << Get Min;
{box:exx, box:exy} = box:axisMin + 10;
box:framebox << Add Graphics Script(
"Front",
Description( "Handle" ),
//Script start
{Handle(
box:exx,
box:exy,
box:exx = x;
box:exy = y;
) ;
box:axisMax = box:axis << Get Max;
box:axisMin = box:axis << Get Min;
Pen Color( "Red" ) ; Line( box:axisMin, {box:exx, box:exy} ) ; }
);
);
Return( cb );
);
ob_group << Append( GB_wHandle( dt, "height", "weight", "sex" ) );
Necesito un cuadro de contexto porque tengo varios GB en la misma ventana con identificadores independientes.
Todo funciona correctamente hasta que selecciono un punto en el gráfico o una fila en la tabla y lo excluyo.
Entonces mis gráficos desaparecen y obtengo "Errores reportados por el script gráfico en el registro" y "Send Expects Scriptable Object in access or evaluation of 'List' , {/*###*/DisplayBox[], DisplayBox[]}" en el registro.
El error se produce debido a las líneas:
box:axisMax = box:axis << Get Max;
box:axisMin = box:axis << Get Min;
Si los comento, no hay errores, pero entonces no obtengo los valores mínimo/máximo actualizados del eje en caso de que el usuario cambie la escala del eje.
¿Cómo puedo solucionarlo?
Automatización y secuencias de comandosRe: Necesito ayuda para solucionar problemas con el script gráfico: "El script gráfico reportó errores en el registro".Esto demuestra el problema de una manera mucho más sencilla.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
ob_group = Outline Box("Testing Handles: " || (dt << Get Name));
gb = dt << Graph Builder(
Size(450, 350),
Ignore Platform Preferences(1),
Show Control Panel(0),
Variables(X(Column("height")), Y(Column("weight")), Overlay("sex")),
Elements(Points(X, Y), Smoother(X, Y))
);
fbs = Report(gb) << XPATH("//FrameBox");
abs = Report(gb) << XPATH("//AxisBox");
show(fbs, abs);
dt << Select Rows(1) << Hide and Exclude(1) << Clear Select;
wait(1);
show(fbs, abs);
Al excluir las filas, el generador de gráficos se recalcula y se eliminan las referencias.
Re: Necesito ayuda para solucionar problemas con el script gráfico: "El script gráfico reportó errores en el registro".Una forma de solucionar esto podría ser añadir
box:axis = box:rgb << XPATH("//AxisBox");
a tu guion gráfico
Re: Necesito ayuda para solucionar problemas con el script gráfico: "El script gráfico reportó errores en el registro".Sí, supuse que se trataba de un redibujado, pero no lograba encontrar la manera de referenciarlo.
Re: Necesito ayuda para solucionar problemas con el script gráfico: "El script gráfico reportó errores en el registro".Sí, funcionó. Por alguna razón pensé que no podría hacer referencia al informe desde dentro del script.
Re: Necesito ayuda para solucionar problemas con el script gráfico: "El script gráfico reportó errores en el registro".@jthi , una pregunta más.
Digamos que quiero encapsular un script para agregar gráficos en una función, que agregaría ese script a un Generador de gráficos.
Esta función solo necesitaría tomar como referencia un cuadro de visualización, luego encontrar el cuadro de marco correspondiente y agregar el script.
En este momento, en mi función, tengo que envolver Graph Builder en Context Box, de modo que los elementos que creo (manejo específicamente) usando este script sean independientes de otros en otros Graph Builders en la misma ventana.
Pregunta: ¿Qué cuadro de visualización debo proporcionar a la función para guardar el contexto aislado? En XML veo que hay EvalContextBox; ¿es esto lo que generó "Context Box"?
¿Cuál sería la sintaxis dentro de la función? Dado que la función no tendrá un cuadro de contexto, tendré que eliminar el espacio de nombres "box". ¿Cómo puedo limitar el contexto en este caso?
Re: Necesito ayuda para solucionar problemas con el script gráfico: "El script gráfico reportó errores en el registro".Estoy un poco confundido sobre qué quieres pasarle a la función, ¿solo una referencia al constructor de gráficos? ¿El constructor de gráficos seguiría estando dentro del cuadro de contexto?
Re: Necesito ayuda para solucionar problemas con el script gráfico: "El script gráfico reportó errores en el registro".Esa es una de las preguntas que tengo: ¿qué DEBO pasarle a la función y si todavía NECESITO el cuadro de contexto en este caso?
En este momento mi guion está estructurado de la siguiente manera:
//Preparing display boxes structure and window
lub = Lineup Box( N );
ob_group = Outline Box( "Report: " || (dt << Get Name) );
ob_group << Append( lub );
nw = New Window( (dt << get name), Window View("Invisible"), ob_group );
Luego trabajo con la tabla de datos para seleccionar lo que quiero graficar, etc., y uso esta función para crear un cuadro de contexto con un constructor de gráficos en su interior, devolviendo un cuadro de contexto:
GB_func = Function( {dt, X_parameter, Y_Parameter...},
cb = Context Box(
gb = Graph Builder(...
//
<GRAPH builder="" code="">
); box:rgb = gb << Report; //Doing some other stuff //Adding Graphics Script box:framebox = box:rgb << XPATH( "//FrameBox" ); box:framebox << Add Graphics Script(...) Return( cb ); );
</GRAPH>
Luego, tomo las columnas que necesito graficar y, para cada una, creo esos cuadros de contexto con la plataforma Graph Builder en su interior:
For Each( {Y_Parameter, index}, Y_Parameters,
lub << Append( GB_func( dt, X_Parameter, Y_Parameter));
);
Lo que quiero es una función a la que pueda pasarle cualquier cuadro de visualización o referencia necesaria para cada Generador de gráficos independiente, y que agregue el mismo script gráfico que funcione de la misma manera que funciona ahora, independientemente de otros Generadores de gráficos.
El objetivo final es poder activar o desactivar los gráficos adicionales en el gráfico mediante el menú contextual del Generador de gráficos; existen casos de uso tanto con gráficos como sin ellos. Eliminar el script de gráficos no supone ningún problema, que yo sepa; estoy intentando averiguar cómo añadirlo en este caso.
Re: Necesito ayuda para solucionar problemas con el script gráfico: "El script gráfico reportó errores en el registro".Context Box es probablemente la opción más sencilla para pasar. También podrías almacenar los valores "globales" en algún espacio de nombres que no sea box (por ejemplo, window, global, named, anonymous, ...), en cuyo caso podrías omitir Context Box y pasar la referencia al constructor de gráficos.
Re: Necesito ayuda para solucionar problemas con el script gráfico: "El script gráfico reportó errores en el registro".¿Qué es el cuadro de visualización que crea Context Box? ¿Es EvalContextBox? ¿Cómo puedo indicar que las variables dentro del script gráfico solo tengan alcance dentro de EvalContextBox? ¿Basta con usar el espacio de nombres de la caja? ¿O existe alguna forma de obtener la referencia del espacio de nombres asociada a EvalContextBox?
Re: Necesito ayuda para solucionar problemas con el script gráfico: "El script gráfico reportó errores en el registro".Puedes usar Namespace()
Names Default To Here(1);
nw = New Window("",
Context Box(
box:var = "",
box:tb = Text Edit Box("AA", <
<SET function=""></SET>
<P>Cambia el valor del cuadro de edición de texto y vuelve a ejecutar la última línea.</P>