Alternar la visibilidad de las principales líneas de cuadrícula en Graph Builder mediante la pulsación de una teclaMe gustaría configurar un complemento para alternar la visibilidad de las principales líneas de cuadrícula en Graph Builder (tanto X como Y), pero tengo problemas con la pieza de JSL...Tengo el objeto GB y el SendToReport( .. Dispatch... código, pero parece querer el nombre de la variable asociado con los ejes X e Y, y mi complemento no sabrá cuáles son.
¿Es esto factible?
Esto es lo que tengo hasta ahora:
// steps to get last_gb scriptable object...<BR /><BR />// send setting change<BR />last_gb << SendToReport(
Dispatch(
{},
"myXaxis",
ScaleBox,
{ Label Row (Show Major Grid( not(Label Row (Show Major Grid ) ) ) ) ) }
),
Dispatch(
{},
"myXYaxis",
ScaleBox,
{ Label Row (Show Major Grid( not(Label Row (Show Major Grid ) ) ) ) ) }
)
)Exploración y visualización de datosRe: Alternar la visibilidad de las principales líneas de cuadrícula en Graph Builder mediante pulsación de teclaHola @BHarris ,
¿Qué hay de usar el cuadro de eje para mostrar la cuadrícula principal?
Si desea utilizar enviar a mensaje de informe, una idea es utilizar obtener mensaje variable para obtener variable.
// #1 Example for Axis Box
gb_rpt = gb_ob << Report();
gb_rpt[axis box( 1 )] << Show Major Grid( 1 );
gb_rpt[axis box( 2 )] << Show Major Grid( 1 );
// #2 Example for send to report
var1 = gb_ob << Get Variable( 1 );
var2 = gb_ob << Get Variable( 2 );
Eval(
Substitute(
Expr(
gb_ob << send to report(
Dispatch(
{},
_var_,
ScaleBox,
{Label Row( Show Major Grid( 1 ) )}
)
)
),
Expr( _var_ ), Eval( Char( var1[1] ) )
)
);
Espero que funcione para tu problema.
Re: Alternar la visibilidad de las principales líneas de cuadrícula en Graph Builder mediante pulsación de tecla¡Esto está muy cerca!Me gustaría que la secuencia de comandos active y desactive el estado de la cuadrícula siempre que se ejecute, pero esto solo puede activar las cuadrículas.Acabo de pasar alrededor de una hora tratando de descubrir cómo leer el estado de la cuadrícula desde un AxisBox, pero la documentación se vuelve muy escasa cuando llego a "Label Row"...
¿Cómo puedo leer el estado actual de la red principal?
Re: Alternar la visibilidad de las principales líneas de cuadrícula en Graph Builder mediante pulsación de teclaPuede haber mejores formas, pero una opción que podría probar es enviar << get script to axisbox y obtener Show Major Grid de eso. Si eso no es visible allí en absoluto, entonces debería poder obtener el valor de las propiedades de los usuarios.
axis_script = axisbox << get script();
cur_gridvalue = Try(
axis_script["Label Row"]["Show Major Grid"];
Print("Grid");
, // not found
Arg(Arg(Get Preference(Major Grid Lines)));
Print("Preference");
);
Re: Alternar la visibilidad de las principales líneas de cuadrícula en Graph Builder mediante pulsación de tecla¡Mucho más cerca!Ahora desactiva las líneas de cuadrícula para el primer cuadro del eje x y el primer eje y, pero no para todos los cuadros del eje en una gráfica de varios ejes:

¿Cómo puedo iterar sobre todos los cuadros de eje?Esto es lo que tengo hasta ahora:
Names Default To Here( 1 );
win = Get Window List();
//Find graph builder windows
graphs = Filter Each({w}, win,
If(Length(w << XPath("//OutlineBox[@helpKey='Graph Builder']")) > 0, 1, 0)
);
gb = graphs[N Items(graphs)][OutlineBox("Graph Builder")] << Get Scriptable Object;
gb_rpt = gb << Report();
gb_axis1 = gb_rpt[AxisBox( 1 )];
gb_axis2 = gb_rpt[AxisBox( 2 )];
axis_script = gb_axis1 << get script();
cur_gridvalue = Try(
axis_script["Label Row"]["Show Major Grid"], // not found
Arg( Arg( Get Preference( Major Grid Lines ) ) )
);
If( cur_gridValue,
gb_axis1 << Show Major Grid( 0 );
gb_axis2 << Show Major Grid( 0 );
,
gb_axis1 << Show Major Grid( 1 );
gb_axis2 << Show Major Grid( 1 );
);(PD.Nunca me habría dado cuenta de "obtener script" o "arg(arg(") por mi cuenta.Siento que soy un guionista semicompetente con 25 años de experiencia, pero todavía me siento bastante perdido en JSL, es muy difícil saber qué está haciendo la mayor parte del tiempo).
Re: Alternar la visibilidad de las principales líneas de cuadrícula en Graph Builder mediante pulsación de teclaPuede usar << XPath para obtener todas las referencias de AxisBox y luego recorrerlas y modificarlas una por una O enviar el mismo mensaje a todas ellas. Esto podría necesitar algunas comprobaciones adicionales para no modificar ningún cuadro de eje que no desee cambiar.
axisboxes = gb_rpt << XPath("//AxisBox");
<< Obtener XML puede ser útil cuando verifica si hay algo específico en AxisBox que podría ayudarlo a reducir las referencias (charID podría ser uno). Luego puede modificar la consulta XPath para usar esto y hacerlo más preciso.

Re: Alternar la visibilidad de las principales líneas de cuadrícula en Graph Builder mediante pulsación de tecla¡Eso lo hizo!Esta es la solución para cualquiera que necesite un script para activar/desactivar las líneas de cuadrícula en todos los gráficos en Graph Builder:
Names Default To Here( 1 );
win = Get Window List();
//Find graph builder windows
graphs = Filter Each( {w}, win,
If( Length( w << XPath( "//OutlineBox[@helpKey='Graph Builder']" ) ) > 0,
1,
0
)
);
gb = graphs[N Items( graphs )][Outline Box( "Graph Builder" )] << Get Scriptable Object;
gb_rpt = gb << Report();
gb_axis1 = gb_rpt[AxisBox( 1 )];
axis_script = gb_axis1 << get script();
cur_gridvalue = Try(
axis_script["Label Row"]["Show Major Grid"], // not found
Arg( Arg( Get Preference( Major Grid Lines ) ) )
);
axisboxes = gb_rpt << XPath( "//AxisBox" );
For Each( {anAxisBox,anIndex}, axisboxes,
If( cur_gridValue,
anAxisBox << Show Major Grid( 0 ),
anAxisBox << Show Major Grid( 1 )
)
);¡Gracias a Jarmo y Yuichi por su ayuda!
***************************************
PD.No entiendo la sugerencia "<< Obtener XML" en absoluto. Intenté ponerlo en 4 lugares diferentes y nunca obtuve ningún XML con "" (aunque obtuve muchos XML ... .).¿Cómo aprendiste a escribir JSL tan bien?
Re: Alternar la visibilidad de las principales líneas de cuadrícula en Graph Builder mediante pulsación de teclaHe aprendido a crear scripts solo mediante scripts (la forma en que hago scripts es que pruebo muchas cosas diferentes, leo la documentación (para JSL generalmente en este orden: Índice de scripts, Guía de scripts, Comunidad JMP, Referencia de sintaxis JSL) y pruebo más cosas y fallar mucho , pero al final casi siempre logro obtener algún tipo de solución funcional).
Creo que puede enviar << get xml a la capa analítica o de informe del objeto jmp. A veces, incluso puede acercarse a la referencia correcta subscribiendo primero y luego usando << get xml, pero en este caso solo lo envié a gb. A continuación se muestra otro ejemplo con Big Class.jmp y luego lo coloqué en su secuencia de comandos. Por lo general, borro el registro, ejecuto << get xml line, hago clic en log y luego uso ctrl+f para buscar algo (si sé lo que estoy buscando). Si tiene que explorar un XML muy grande, podría ser útil guardar el xml como un archivo .xml y abrirlo con alguna aplicación que tenga resaltado de sintaxis para xml (el bloc de notas ++ suele ser suficiente).

Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << Select Rows([1, 2]) << Hide and Exclude(1) << Clear Select;
gb = dt << Graph Builder(
Size(528, 456),
Show Control Panel(0),
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Smoother(X, Y, Legend(10)))
);
// Report(gb) << Get Xml; // works also on report
gb << Get XML; // run just this line to see xml in log or use Write() (write is the cleanest option)
// Write(gb << Get XML);
// xml_str = gb << get xml;
// show(xml_str);
where_tb = Report(gb) << XPath("//TextBox[contains(text(), 'Where(')]");
where_tb << Text Color("Blue"); // usually used to hide where text << Set Visibility("Collapse");
y aquí es donde colocaría << Obtener XML en su secuencia de comandos, ejecútelo una vez, verifique el xml y luego elimine la línea del código, ya que generalmente no tiene sentido dejar << Obtener XML en secuencias de comandos listas para usar.
