Automatizar la línea de referencia según los datos de la columnaHola, soy muy nuevo en JSL y estoy luchando por pensar en una forma de crear automáticamente múltiples líneas de referencia en un gráfico basado en valores en una columna específica. Actualmente, estoy graficando una variable (: Señal) en el eje Y y tres variables (: Zona,: Objetivo y: Condición) en el eje X. Cada variable (: objetivo) tiene una (: señal histórica) específica y me gustaría encontrar una manera de graficar automáticamente un (: objetivo) (: señal histórica) como una línea de referencia. El código que tengo se realiza agregando manualmente el valor de la señal histórica a través de la línea h (), pero lo ideal es que el script agregue una línea de referencia para cada (: objetivo) en función de su señal histórica correspondiente. ¡Gracias!
Variability Chart(
Y( :Signal ),
X( :Zone, :Target, :Condition ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Mean Diamonds( 1 ),
SendToReport(
Dispatch(
{"Variability Chart for Signal"},
"Variability Chart",
FrameBox,
{Frame Size( 969, 240 ),
Add Graphics Script(
2,
Description( "" ),
Pen Color( "RED" );
//Target 2
H Line( 0, 2, 234 );
//Target 3
H Line( 2, 4, 670 );
//Target 1
H Line( 4, 6, 463 );
)}
)
)
);
ScriptingRe: Automatizar la línea de referencia en función de los datos de la columnaDada su estructura de datos actual, aquí hay una forma de automatizar sus señales históricas
Names Default To Here( 1 );
dt = Current Data Table();
targ1 = Mean( :Historical Signal[dt << get rows where( :Target == "Target 1" )] );
targ2 = Mean( :Historical Signal[dt << get rows where( :Target == "Target 2" )] );
targ3 = Mean( :Historical Signal[dt << get rows where( :Target == "Target 3" )] );
Variability Chart(
Y( :Signal ),
X( :Zone, :Target, :Condition ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Mean Diamonds( 1 ),
SendToReport(
Dispatch(
{"Variability Chart for Signal"},
"Variability Chart",
FrameBox,
{Frame Size( 969, 240 ), Add Graphics Script(
2,
Description( "" ),
Pen Color( "RED" );
//Target 2
H Line( 0, 2, targ2 );
//Target 3
H Line( 2, 4, targ3 );
//Target 1
H Line( 4, 6, targ1 );
)}
)
)
);Re: Automatizar la línea de referencia en función de los datos de la columnaHola txnelson, muchas gracias por tu respuesta, ¡esto es casi exactamente lo que estoy buscando! La única otra cosa que me pregunto es si es posible hacer que el código h line () coincida con su correspondiente: Target en lugar de tener que ingresar manualmente las coordenadas en el gráfico. En el futuro, agregaré diferentes cantidades de objetivos y no siempre estarán en el mismo orden.
Re: Automatizar la línea de referencia en función de los datos de la columnaTodo lo que se necesita hacer es averiguar cómo obtener los valores y el orden, y luego generar el JSL requerido.Aquí hay un ejemplo simple que debería darle un comienzo en la dirección correcta para crear su guión final.
Names Default To Here( 1 );
dt = Current Data Table();
// Find the number of targets and get the means
Summarize( dt, targs = by( :Zone, :Target ), targMeans = Mean( :Historical Signal ) );
vc = Variability Chart(
Y( :Signal ),
X( :Zone, :Target, :Condition ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Mean Diamonds( 1 )
);
// Create the JSL to submit to generate the Target Lines
theExpr =
"Report( vc )[FrameBox( 1 )] << add graphics Script(
Description( \!"\!" ),
Pen Color( \!"RED\!" );";
For( ii = 1, ii <= N Items( targMeans ), ii++,
theExpr = theExpr || "H Line( " || Char( (ii - 1) * 2 ) || "," || Char( (ii - 1) * 2 + 2 )
|| "," || Char( targMeans[ii] ) || ");";
);
Eval( Parse( theExpr ) );