¿Cómo agregar diagramas de caja a puntos cuando se suministran variables Y como lista al generador de gráficos?El siguiente script de ejemplo de un hilo anterior (resuelto, gracias a @jthi ) mío me permite trazar la variable Y como puntos de una lista.
Quiero agregar Diagramas de caja además de Puntos en mi gráfico. ¿Cómo agregar diagramas de caja en el siguiente script?
Names Default To Here(1);
dt = Open("$sample_data\Big Class.jmp");
y_values = {"name", "age", "sex", "weight"};
variables_expr = Expr(Variables(X(:height)));
For Each({y_col}, y_values,
temp_expr = Expr(Y());
Insert Into(temp_expr, Name Expr(AsColumn(dt, y_col)));
Insert Into(variables_expr, Name Expr(temp_expr));
);
gb_expr = Expr(Graph Builder(
Show Control Panel(0)
));
Insert Into(gb_expr, Name Expr(variables_expr));
For Each({y_col, idx}, y_values,
Eval(EvalExpr(
Insert Into(gb_expr,
Name Expr(Elements(Position(1, Expr(idx)), Points(X, Y, Legend(Expr(idx)))))
)
));
);
Show(Name Expr(gb_expr));
Eval(gb_expr);Automatización y secuencias de comandosventanasRe: ¿Cómo agregar diagramas de caja a puntos cuando se suministran variables Y como lista al generador de gráficos?Cree el gráfico de forma interactiva en JMP

lleve el script a su portapapeles/ventana de script
Graph Builder(
Show Control Panel(0),
Variables(X(:height), Y(:name), Y(:age), Y(:sex), Y(:weight)),
Elements(Position(1, 1), Points(X, Y, Legend(1)), Box Plot(X, Y, Legend(5))),
Elements(Position(1, 2), Points(X, Y, Legend(2)), Box Plot(X, Y, Legend(6))),
Elements(Position(1, 3), Points(X, Y, Legend(3)), Box Plot(X, Y, Legend(7))),
Elements(Position(1, 4), Points(X, Y, Legend(4)), Box Plot(X, Y, Legend(8))),
SendToReport(
Dispatch(
{},
"400",
LegendBox,
{Legend Position(
{1, [0], 5, [4, -3], 2, [1], 6, [5, -3], 3, [2], 7, [6, -3], 4, [3],
8, [7, -3]}
)}
)
)
)
Vea lo que se debe cambiar para incluir BoxPlots cuando el generador de gráficos original es así
Graph Builder(
Show Control Panel(0),
Variables(X(:height), Y(:name), Y(:age), Y(:sex), Y(:weight)),
Elements(Position(1, 1), Points(X, Y, Legend(1))),
Elements(Position(1, 2), Points(X, Y, Legend(2))),
Elements(Position(1, 3), Points(X, Y, Legend(3))),
Elements(Position(1, 4), Points(X, Y, Legend(4)))
)
Vuelva a su script e intente pequeñas modificaciones. Puede ver con bastante facilidad que le falta algo en Elements y que se basa en su script original.
Name Expr(Elements(Position(1, Expr(idx)), Points(X, Y, Legend(Expr(idx)))))
parece que deberías intentar agregar el diagrama de caja en el formato correcto allí
Re: ¿Cómo agregar diagramas de caja a puntos cuando se suministran variables Y como lista al generador de gráficos?Ejecute el gráfico.
Abra el panel de control
Agregue los diagramas de caja que desee.
Cerrar el panel de control
Vaya al triángulo rojo y seleccione
Guardar=>Secuencia de comandos en ventana de secuencia de comandos
Examine el código y cambie el script para agregar los elementos adicionales que tiene el nuevo script y que el antiguo no tiene.
Re: ¿Cómo agregar diagramas de caja a puntos cuando se suministran variables Y como lista al generador de gráficos?@txnelson He estado haciendo exactamente eso, agregué diagramas de caja de forma interactiva, luego revisé el script resultante, hice los cambios en mi script original, pero todavía no pude hacer que los diagramas de caja funcionaran.Supongo que todavía no soy bueno para detectar lo que falta/necesita.
Intentará @jthi sugerencia ahora.
Re: ¿Cómo agregar diagramas de caja a puntos cuando se suministran variables Y como lista al generador de gráficos?Ejecute su JSL y luego modifique el gráfico para que se vea como desea y luego guarde el JSL del nuevo gráfico.Agregue el nuevo JSL a esta pista de discusión y lo echaré un vistazo.
Re: ¿Cómo agregar diagramas de caja a puntos cuando se suministran variables Y como lista al generador de gráficos?@txnelson Lo siguiente se acerca a mi caso real.
Names default To Here (1);
Clear Log ();
dt = Open("$sample_data\Semiconductor Capability.jmp");
y_values = {"NPN1", "IVP1", "PNP4", "NPN4"};
variables_expr = Expr(Variables(X(:lot_id)));
For Each({y_col}, y_values,
temp_expr = Expr(Y());
Insert Into(temp_expr, Name Expr(AsColumn(dt, y_col)));
Insert Into(variables_expr, Name Expr(temp_expr));
);
gb_expr = Expr(Graph Builder(
Show Control Panel(0)
));
Insert Into(gb_expr, Name Expr(variables_expr));
For Each({y_col, idx}, y_values,
Eval(EvalExpr(
Insert Into(gb_expr,
Name Expr(Elements(Position(1, Expr(idx)), Points(X, Y, Legend(Expr(idx)))))
)
));
);
Show(Name Expr(gb_expr));
Eval(gb_expr); lo que da

Sin embargo, me gustaría algo como lo siguiente

El script generado por JMP para el cual es
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :lot_id ), Y( :NPN1 ), Y( :IVP1 ), Y( :PNP4 ), Y( :NPN4 ) ),
Elements(
Position( 1, 1 ),
Points( X, Y, Legend( 1 ), Jitter( "None" ) ),
Box Plot( X, Y, Legend( 5 ), Jitter( "None" ) )
),
Elements(
Position( 1, 2 ),
Points( X, Y, Legend( 2 ), Jitter( "None" ) ),
Box Plot( X, Y, Legend( 6 ), Jitter( "None" ) )
),
Elements(
Position( 1, 3 ),
Points( X, Y, Legend( 3 ), Jitter( "None" ) ),
Box Plot( X, Y, Legend( 7 ), Jitter( "None" ) )
),
Elements(
Position( 1, 4 ),
Points( X, Y, Legend( 4 ), Jitter( "None" ) ),
Box Plot( X, Y, Legend( 8 ), Jitter( "None" ) )
),
SendToReport(
Dispatch(
{},
"400",
LegendBox,
{Legend Position(
{1, [0], 5, [4, -3], 2, [1], 6, [5, -3], 3, [2], 7, [6, -3], 4, [3],
8, [7, -3]}
)}
)
)
);La pregunta es ¿cómo modificar el script superior de esta publicación para incluir un diagrama de caja además de puntos?
Agregar diagramas de caja () justo debajo de Puntos () no me proporciona ambas cosas.
Supongo que mi ubicación para los diagramas de caja () es incorrecta. Necesito ayuda aquí.
Re: ¿Cómo agregar diagramas de caja a puntos cuando se suministran variables Y como lista al generador de gráficos?Creo que usaste valores atípicos predeterminados del "diagrama de caja".
¿Está buscando el método cuantil "Box Plot" que conecte todos los puntos?

Graph Builder(
Size( 1135, 705 ),
Show Control Panel( 0 ),
Variables(
X( :“S-b"n ),
Y( :C),
Color( :“S-b"n )
),
Elements( Box Plot( X, Y, Legend( 4 ), Box Type( "Quantile" ) ) )
);
Re: ¿Cómo agregar diagramas de caja a puntos cuando se suministran variables Y como lista al generador de gráficos?Se requirieron cambios muy pequeños para producir el gráfico que desea.
El JSL producido por el script inicial que ejecuta Graph Builder es
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :lot_id ), Y( :NPN1 ), Y( :IVP1 ), Y( :PNP4 ), Y( :NPN4 ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 1 ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 2 ) ) ),
Elements( Position( 1, 3 ), Points( X, Y, Legend( 3 ) ) ),
Elements( Position( 1, 4 ), Points( X, Y, Legend( 4 ) ) )
);
Cuando uno mira el JSL que creó el código Graph Builder anterior, solo 2 secciones hacen el trabajo real.
gb_expr = Expr(Graph Builder(
Show Control Panel(0)
));
Crea el shell para Graph Builder.
Graph Builder(
Show Control Panel( 0 ),
);
El JSL
variables_expr = Expr(Variables(X(:lot_id)));
For Each({y_col}, y_values,
temp_expr = Expr(Y());
Insert Into(temp_expr, Name Expr(AsColumn(dt, y_col)));
Insert Into(variables_expr, Name Expr(temp_expr));
);
Genera el código
Variables( X( :lot_id ), Y( :NPN1 ), Y( :IVP1 ), Y( :PNP4 ), Y( :NPN4 ) )
Entonces,
Insert Into(gb_expr, Name Expr(variables_expr));
Inserta las variables (X(.................) JSL en el código Graph Builder()
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :lot_id ), Y( :NPN1 ), Y( :IVP1 ), Y( :PNP4 ), Y( :NPN4 ) )
);
Ahora lo que hay que hacer es construir
Elements( Position( 1, 1 ), Points( X, Y, Legend( 1 ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 2 ) ) ),
Elements( Position( 1, 3 ), Points( X, Y, Legend( 3 ) ) ),
Elements( Position( 1, 4 ), Points( X, Y, Legend( 4 ) ) )
El JSL que crea estas líneas de código es
For Each({y_col, idx}, y_values,
Eval(EvalExpr(
Insert Into(gb_expr,
Name Expr(Elements(Position(1, Expr(idx)), Points(X, Y, Legend(Expr(idx)))))
)
));
);
Recorre cada uno de los valores de Y y crea la línea Elementos uno a la vez, y la inserta en Graph Builder() JSL.
Finalmente,
Eval(gb_expr);
Ejecuta el JSL Graph Builder completo
Ahora bien, ¿qué es lo que hay que cambiar?
Básicamente, si uno observa las diferencias entre el JSL que crea el script original y el JSL guardado del Graph Builder con las nuevas modificaciones, en la salida del script original, la estructura de Elementos es
Elements( Position( 1, 1 ), Points( X, Y, Legend( 1 ) ) )
Donde la sección Elementos del código guardado tiene una sección para puntos y diagrama de caja
Elements(
Position( 1, 1 ),
Points( X, Y, Legend( 1 ), Jitter( "None" ) ),
Box Plot( X, Y, Legend( 5 ), Jitter( "None" ) )
)
Por lo tanto, lo único que hay que cambiar es agregar esta segunda sección al código que genera la sección Elementos.
For Each( {y_col, idx}, y_values,
Eval(
Eval Expr(
Insert Into(
gb_expr,
Name Expr(
Elements(
Position( 1, Expr( idx ) ),
Points( X, Y, Legend( Expr( idx ) ), jitter( "None" ) ),
Box Plot( X, Y, Legend( Expr( N Items( y_values ) + idx ), jitter( "None" ) ) )
)
)
)
)
)
);
Si pones todo esto junto, el nuevo guión es
Names Default To Here( 1 );
Clear Log();
dt = Open( "$sample_data\Semiconductor Capability.jmp" );
y_values = {"NPN1", "IVP1", "PNP4", "NPN4"};
variables_expr = Expr(
Variables( X( :lot_id ) )
);
For Each( {y_col}, y_values,
temp_expr = Expr( Y() );
Insert Into( temp_expr, Name Expr( As Column( dt, y_col ) ) );
Insert Into( variables_expr, Name Expr( temp_expr ) );
);
gb_expr = Expr(
Graph Builder( Show Control Panel( 0 ) )
);
Insert Into( gb_expr, Name Expr( variables_expr ) );
For Each( {y_col, idx}, y_values,
Eval(
Eval Expr(
Insert Into(
gb_expr,
Name Expr(
Elements(
Position( 1, Expr( idx ) ),
Points( X, Y, Legend( Expr( idx ) ), jitter( "None" ) ),
Box Plot( X, Y, Legend( Expr( N Items( y_values ) + idx ), jitter( "None" ) ) )
)
)
)
)
)
);
Show( Name Expr( gb_expr ) );
Eval( gb_expr );Re: ¿Cómo agregar diagramas de caja a puntos cuando se suministran variables Y como lista al generador de gráficos?@txnelson Gracias.
No se me habría ocurrido esto fácilmente.
Box Plot( X, Y, Legend( Expr( N Items( y_values ) + idx ), jitter( "None" ) ) )
¿Cómo cambio los marcadores predeterminados en Puntos para que digan un "+" o un "cuadrado"? Esto no funciona
Points( X, Y, Legend( Expr( idx ) ), jitter( "None" ), marker ("square") )Cambiando el marcador Muestra interactivamente que necesito dirigir el cambio de marcador a través de sendToReport () para cada variable Y. ¿Cómo hacer esto todo a la vez para todas las variables Y?
Re: ¿Cómo agregar diagramas de caja a puntos cuando se suministran variables Y como lista al generador de gráficos?Dependiendo de dónde lo hagas, dónde ver qué será diferente. Aquí tienes un ejemplo si lo haces desde Legend:
Cámbialo de la leyenda y obtendrás algo como
{Legend Model(4, Properties(0, {Marker("Circle")}, Item ID("NPN4", 1)))}
Así que busque el modelo de leyenda en el índice de secuencias de comandos

Obtenga el script desde allí, modifíquelo para que se ajuste a sus necesidades, pero manténgalo lo más simple posible (agregue un segundo eje Y) y pruébelo.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(528, 448),
Show Control Panel(0),
Variables(X(:sex), Y(:height), Y(:weight)),
Elements(Position(1, 1), Points(X, Y, Legend(3))),
Elements(Position(1, 2), Points(X, Y, Legend(1)))
);
server = gb << Get Legend Server;
item = server << Get Legend Item(1, 1);
item << Set Properties({Marker("Circle")});
Conseguiste cambiar marcadores en una parcela. Entonces preguntas: ¿cómo los cambio en todas las parcelas? Luego explore el guión con más detalle y parece que se proporcionan algunos índices.
item = server << Get Legend Item(1, 1);
marque << Obtener elemento de leyenda del índice de secuencias de comandos y espere que esté allí y, si no está, explore otros objetos relacionados con la leyenda y espere que funcionen de manera similar (o simplemente intente enviar mensajes al servidor << obtener lege Ctrl+Espacio aquí).
server << Get Legend Items;
{{LegendModelItem(Label("height"), Type("Marker"))},
{LegendModelItem(Label("weight"), Type("Marker"))}}
Ahora tienes una lista de elementos de leyenda. Intente recorrer esa lista y vea qué sucede
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(528, 448),
Show Control Panel(0),
Variables(X(:sex), Y(:height), Y(:weight)),
Elements(Position(1, 1), Points(X, Y, Legend(3))),
Elements(Position(1, 2), Points(X, Y, Legend(1)))
);
server = gb << Get Legend Server;
For Each({item}, server << Get Legend Items,
item << Set Properties({Marker("Circle")});
);
La opción más fácil es configurar los marcadores como estados de fila en su tabla de datos, si eso funciona para usted.
Re: ¿Cómo agregar diagramas de caja a puntos cuando se suministran variables Y como lista al generador de gráficos?@jthi Gracias. ¿Hay alguna manera de cambiar los marcadores cuando los puntos se trazan primero en lugar de obtener un identificador del servidor de leyendas más tarde y luego cambiar los marcadores para cada variable Y?
Re: ¿Cómo agregar diagramas de caja a puntos cuando se suministran variables Y como lista al generador de gráficos?¿Hay alguna razón por la que no se puedan cambiar después?
Puede usar SendToReport y crear el modelo Legend dentro de la parte Dispatch con ideas similares a las que se han creado en otras partes de su script.
Re: ¿Cómo agregar diagramas de caja a puntos cuando se suministran variables Y como lista al generador de gráficos?@jthi Seguro que las cosas podrían cambiarse después. Cambiar marcadores mientras se trazan los puntos me pareció una ruta más sencilla.
Re: ¿Cómo agregar diagramas de caja a puntos cuando se suministran variables Y como lista al generador de gráficos?@jthi @txnelson En el script principal a continuación, agregué el filtro de datos local () en Eval(), que funciona según lo previsto.
Eval( gb_expr <<LOCAL data="https://community.jmp.com/" filter=""></LOCAL>
pero si agrego el script para actualizar los marcadores, ¡el gráfico se traza dos veces!
Eval(
server = gb_expr << Get Legend Server;
For Each( {item}, server << Get Legend Items, item << Set Properties( {Marker( "Circle" )} ) );
);<BR />
Names Default To Here( 1 );
Clear Log();
dt = Open( "$sample_data\Semiconductor Capability.jmp" );
y_values = {"NPN1", "IVP1", "PNP4", "NPN4"};
variables_expr = Expr(
Variables( X( :lot_id ) )
);
For Each( {y_col}, y_values,
temp_expr = Expr( Y() );
Insert Into( temp_expr, Name Expr( As Column( dt, y_col ) ) );
Insert Into( variables_expr, Name Expr( temp_expr ) );
);
gb_expr = Expr(
Graph Builder( Show Control Panel( 0 ) )
);
Insert Into( gb_expr, Name Expr( variables_expr ) );
For Each( {y_col, idx}, y_values,
Eval(
Eval Expr(
Insert Into(
gb_expr,
Name Expr(
Elements(
Position( 1, Expr( idx ) ),
Points( X, Y, Legend( Expr( idx ) ), jitter( "None" ) ),
Box Plot( X, Y, Legend( Expr( N Items( y_values ) + idx ), jitter( "None" ) ) )
)
)
)
)
)
);
//Show( Name Expr( gb_expr ) );
Eval( gb_expr <<LOCAL data="https://community.jmp.com/" filter=""></LOCAL>El segundo gráfico es con los marcadores actualizados.
¿Cómo trazar un gráfico único con los marcadores actualizados junto con el filtro de datos local?
Supongo que no puedo colocar correctamente la última pieza para cambiar el marcador cuando solicito ayuda.
Re: ¿Cómo agregar diagramas de caja a puntos cuando se suministran variables Y como lista al generador de gráficos?No deseas ejecutar gb_expr dos veces. Desea obtener la referencia que obtiene de gb_expr y enviarle esos mensajes.
gb = Eval( gb_expr );
gb << Local data Filter(...)
server = gb << get legend server;