Graph Builder, cómo cambiar el color de un elemento e información sobre la sintaxis de SendToReportHola,
Creo un gráfico con contenido dinámico (el número de variables se determina en tiempo de ejecución).
Me gustaría cambiar para cambiar varias cosas después de configurar el generador de gráficos, por ejemplo, asignar un nuevo color. La razón para hacerlo después es porque no conozco los cambios antes de ejecutar otras partes de mi script que no puedo ejecutar antes.
He simplificado mi problema básico a este ejemplo:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = Graph Builder(
Automatic Recalc( 0 ),
Variables( X( :age ), Y( :height ) ),
Elements( Points( X, Y ), Smoother( X, Y ) )
);
// do some other stuff incl. addition or removal of variables to gb
// how do I *MODIFY* the color of Points, Smoother here or add a Line Plot?
Sé la posición de las variables en el gráfico si eso ayuda (1,1 en el ejemplo anterior).
Salud,
Alex
Re: como cambiar el color de una lineaHola, Alex,
Lo siento por la respuesta demorada.
Supongamos que se envía el siguiente mensaje de modelo de leyenda.
Legend Model( 2, Properties( 1, {Line Color( 4 )} ) )
- El primer argumento (2) es una identificación única que hace referencia a un modelo de leyenda específico dentro de ScaleBox. En el ejemplo anterior, un valor de 1 se referiría al modelo de leyenda que contiene los puntos, mientras que un valor de 2 apunta a las líneas más suaves.
- El segundo argumento (Properties( 1, {Line Color( 4 )} )) contiene información sobre qué elemento dentro del modelo de leyenda aplicar un conjunto de propiedades dado.
- El primer argumento dentro de Propiedades (1) es un número de elemento basado en cero para identificar a qué elemento aplicar la nueva propiedad.
- El segundo argumento dentro de Propiedades ({Line Color( 4 )}) es una lista de propiedades para aplicar a un elemento de modelo de leyenda determinado. En este caso, estamos cambiando el color de la línea a verde.
Aquí están algunos ejemplos:
El siguiente script establece que el primer elemento en el primer modelo de leyenda (puntos) sea verde. En este caso, el primer elemento es "F".
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Grid Transparency( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model( 1, Properties( 0, {Line Color( 4 )} ) )}
)
)
);
(De ahora en adelante, solo daré la parte del modelo de leyenda para reemplazar en el script anterior)
El siguiente fragmento de código del modelo de leyenda cambiará el color del segundo elemento ("M") dentro del modelo de leyenda de puntos.
Legend Model( 1, Properties( 1, {Line Color( 4 )} ) )
El siguiente fragmento de código del modelo de leyenda cambiará el color del primer elemento ("F") dentro del modelo de leyenda de línea más suave.
Legend Model( 2, Properties( 0, {Line Color( 4 )} ) )
El siguiente fragmento de código del modelo de leyenda cambiará el color del segundo elemento ("M") dentro del modelo de leyenda de línea más suave.
Legend Model( 2, Properties( 1, {Line Color( 4 )} ) )
NOTA: cambiar el color de la línea más suave también cambiará el color de los puntos correspondientes, pero cambiar el color de los puntos no afecta el color de la línea más suave asociada.
Re: como cambiar el color de una lineaGracias por los comentarios.
¿Podría explicar también la sintaxis del modelo de leyenda?
Re: como cambiar el color de una lineaLa sintaxis del argumento SendToReport es la siguiente (del índice de secuencias de comandos):
SendToReport( Dispatch( "Outline name", "Element name", Element type, command );
El segundo argumento en el comando de envío ("Nombre del elemento") se usa como identificador para encontrar el DisplayBox correcto. Por ejemplo, este argumento coincidiría con el atributo "helpKey" al usar un comando Dispatch para un FrameBox. El argumento de tipo de elemento le dice a JMP qué tipo de atributo buscar (ya que es diferente para diferentes DisplayBoxes).
Para un ScaleBox (según sea necesario en este caso), el argumento del nombre del elemento se refiere al atributo "charID". Graph Builder crea múltiples ScaleBoxes para varios propósitos, pero el charID de "400" se asigna al ScaleBox que se necesita para enviar mensajes como el modelo de leyenda.
A continuación se muestra un extracto del XML para un generador de gráficos (creado con los scripts más abajo) que muestra los cinco ScaleBoxes que se crearon. Notará que uno de los cuadros de escala tiene un charID de "400", que es el cuadro de escala que debemos usar para el mensaje del modelo de leyenda.
<..truncated..>
<..truncated..>
<..truncated..>
Otra forma de abordar el uso del mensaje del modelo de leyenda es enviarlo directamente a este ScaleBox. Una forma de hacer referencia a este ScaleBox es usar XPath como se muestra a continuación. Este método hace referencia al ScaleBox que tiene el charID de "400".
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Grid Transparency( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
scalebox = gb << xpath("//ScaleBox[@charID=\!"400\!"]");
scalebox << Legend Model( 2, Properties( 1, {Line Color( 4 )} ) );
El siguiente script hace lo mismo, pero usa el método SendToReport en su lugar.
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Grid Transparency( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model( 2, Properties( 1, {Line Color( 4 )} ) )}
)
)
);
Gracias,
Re: como cambiar el color de una lineaEsta es una gran solicitud para el desarrollo de JMP, es decir, para documentar el funcionamiento interno del generador de gráficos.
Re: como cambiar el color de una lineaHago lo mismo, pero ahora que veo el código generado, necesito poder entenderlo.
No pude encontrar documentación para Legend Model y tampoco para "400".
Es por eso que estaba pidiendo ayuda y agradecería mucho sus comentarios.
Re: como cambiar el color de una lineaNo toda la sintaxis "interna" del generador de gráficos está documentada. Cuando se trata de GB hago lo siguiente:
Cree un gráfico que se vea exactamente como lo que quiero, incluido el tipo de gráfico, símbolos, colores, líneas, etc.
Haga clic en el pequeño triángulo rojo para obtener el código JSL
Incrustar el código JSL en mi script
Básicamente, dejo que GB haga el trabajo pesado y luego uso el código que genera.
Re: como cambiar el color de una lineaHola Ian,
gracias por el gran ejemplo.
¿Podría señalarme la parte de la guía de secuencias de comandos que contiene información sobre la sintaxis del modelo de leyenda, el significado del valor "400"?
He buscado las palabras "modelo de leyenda", sin resultados. 400 tuvo varios aciertos pero no pude identificar algo relevante.
¡Gracias por su ayuda!
Salud,
Alex
Re: como cambiar el color de una lineaSimplemente hágalo de forma interactiva y luego inspeccione el código que JMP genera para usted. Adaptando tu ejemplo:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = Graph Builder(
Automatic Recalc( 0 ),
Variables( X( :age ), Y( :height ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
// Add 'weight'
Wait(2);
gbb = Report( gb )[Graph Builder Box( 1 )];
upper_graph_inner_pos = 2;
gbb << Add Variable({Column( "weight" ), Role( "Y" ), Position( 1 ), Inner Position( upper_graph_inner_pos )});
// Change the colour of the points and smoother for 'weight' to green
Wait(2);
gb << SendToReport( Dispatch({}, "400", ScaleBox, {Legend Model( 2, Properties( 1, {Line Color( 4 )} ) )} ) );
Con respecto a la pregunta menos importante, puede buscar en 'Ayuda> Libros> Guía de secuencias de comandos', que a menudo brinda algunos consejos.
Re: como cambiar el color de una lineaHe tenido preguntas similares pero nunca obtuve respuestas. Parece que los expertos de JMP en este foro evitan esta pregunta o no alientan a los usuarios de JMP a conocer esto más a fondo.
Re: como cambiar el color de una lineaaquí hay un mejor ejemplo. como cambio el color de los puntos y el mas suave para peso en este?
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = Graph Builder(
Automatic Recalc( 0 ),
Variables( X( :age ), Y( :height ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
gbb = Report( gb )[Graph Builder Box( 1 )];
upper_graph_inner_pos = 2;
gbb << Add Variable(
{Column( "weight" ), Role( "Y" ), Position( 1 ), Inner Position( upper_graph_inner_pos )}
);
gb << SendToReport(
Dispatch( {}, "400", ScaleBox, {Legend Model( 1, Properties( 0, {Line Color( RGB color(31,119,180) ), Fill Color( 0 )} ) )} )
);
preguntas menos importantes:
¿Qué significa "400" en este contexto?
Re: como cambiar el color de una lineaHola @Justin_Chilton , ¿qué identificadores adicionales se utilizan para los nombres de elementos además de helpKey y charID ?
Cuando cambio una etiqueta de eje, el código JSL dice
gb << SendToReport( Dispatch( {}, "<STRONG>X Title</STRONG>", TextEditBox, {Set Text( "new" )} ))... pero el título X no aparece en el código XML del árbol de visualización. ¿Qué identificador es?
Hablando con cajas de exhibición