Re: Cómo agregar un script de gráficos dinámicamente a un gráfico de variabilidad con varios cuadros de marcoNo estoy seguro de qué es exactamente lo que estás intentando, pero ¿funcionaría algo como esto?
Names default to here( 1 );
dt = open("$SAMPLE_DATA\Big Class.jmp");
var_chart = dt << Variability Chart( Y( :height ), X( :sex ), By( :age ), stddevchart(0) );
summarize(dt, ages = by(:age));
var_rpt = var_chart << Report(); // this should just give a list of outlineboxes
for(i=1, i<=nitems(var_rpt), i++,
olb = var_rpt[i];
framebox = olb[FrameBox(1)];
framebox << Add Graphics Script(
Transparency( 0.5 );
Pen Color( "blue" );
Line([0,100], [62.5, 62.5]);
);
);Re: Cómo agregar un script de gráficos dinámicamente a un gráfico de variabilidad con varios cuadros de marcoPor lo general, no uso variables en secuencias de comandos de gráficos a menos que se generen completamente internamente en el cuadro de marco. Aquí hay un ejemplo de mi enfoque.
Names Default To Here( 1 );
// open example
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
// launch variability chart
var_chart = dt << Variability Chart( Y( :height ), X( :sex ), By( :age ), stddevchart( 0 ) );
// get summary in same order as By groups
Summarize( dt, age = by( :age ), avg = Mean( :height ) );
var_rpt = var_chart << Report;
// iterate over list and add script using H Line() with literal argument
For( i = 1, i <= N Items( age ), i++,
Eval(
Substitute(
Expr(
var_rpt[i][FrameBox(1)] << Add Graphics Script(
Pen Color( "Red" ); H Line( aaa );
);
),
Expr( aaa ), avg[i]
)
)
);Re: Cómo agregar un script de gráficos dinámicamente a un gráfico de variabilidad con varios cuadros de marcoPuede recorrer el resultado de retorno del original Gráfica de Variabilidad( Por( ... ) ) dominio:
names default to here(1);
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Cars.jmp" );
rpt = dt << Variability Chart(
Y( :Head IC),
X( :Make, :Model ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
By( :NAME("D/P"), :Protection ),
);
//find groupings:
subt = dt << Summary( Group( :"D/P"n, :Protection ), Link to Original Data Table( 0 ) );
dps = subt:"D/P"n << Get Values;
protections = subt:protection << Get Values;
Close( subt, No Save );
For( t = 1, t <= N Items( dps ), t++,
Eval( eval Expr(
rows = dt << Get Rows Where( :NAME("D/P") == Expr( dps[t] ) & :Protection == Expr( protections[t] ) );
) );
subt = dt << Subset( Rows( rows ), Columns( :Make, :Model, :Wt ), Not Linked, Private );
sumt = subt << Summary( Group( :Make, Model ), Mean( :Wt ), Statistics Column Name Format( "Column" ), Link to Original Data Table( 0 ), Private );
Close( subt, No Save );
subt = sumt << Summary( Group( :Make ), Mean( :Wt ), Statistics Column Name Format( "Column" ), Link to Original Data Table( 0 ), Private );
Close( sumt, No Save );
category number = [=>];
category average = [=>];
For Each Row( subt,
category number[:Make] = :N Rows; // each least-significant category in a VariabilityPlot is exactly X=1 width on the hidden x-axis, starting at zero
category average[:Make] = :Wt
);
Close( subt, No Save );
tree = rpt[t] << Report;
Eval( Eval Expr(
tree[FrameBox( 1 )] << Add Graphics Script(
Local( {values = Expr( category average ), numbers = Expr( category number ), i, items, sum = 0},
items = numbers << Get Keys;
Pen Size( 2 );
Pen Color( "Blue" );
Summation( i = 1, N Items( items ),
Line( Eval List( {sum, values[items[i]]} ), Eval List( {sum += numbers[items[i]], values[items[i]]} ) );
0
)
)
)
) )
);Re: Cómo agregar un script de gráficos dinámicamente a un gráfico de variabilidad con varios cuadros de marcoHola Marcos, gracias por tu respuesta! Me preguntaba cuál es el valor pasado de "aaa" en H Line() y Expr(), no lo veo asignado en ninguna parte, así que tengo curiosidad por saber qué hace eso. ¡Gracias!
Re: Cómo agregar un script de gráficos dinámicamente a un gráfico de variabilidad con varios cuadros de marcoHola Vince,
Gracias por la respuesta, veo que tiene 62.5 codificado, pero ¿sabe cómo adaptaría eso para que sea dinámico y sea el valor en: wt?
Re: Cómo agregar un script de gráficos dinámicamente a un gráfico de variabilidad con varios cuadros de marcoLa primera expresión es solo una plantilla. La expresión 'aaa' es un marcador de posición para la sustitución. Nunca se evalúa. Substitute() busca Expr( aaa ) y sustituye el valor.
Re: Cómo agregar un script de gráficos dinámicamente a un gráfico de variabilidad con varios cuadros de marcoYa veo, gracias por la explicación. Solo por curiosidad, jmp no evalúa primero los valores dentro de una función. He tenido problemas con esto en el pasado, pero no he podido averiguar qué buscar para comprender el comportamiento que proviene de un fondo de Python. En mi cabeza, H Line debería obtener avg[i] en lugar de tener que sustituir el valor, pero aparece un error.
"subíndice no válido (debe ser un número o una lista de números) en el acceso o la evaluación de 'avg[ /*###*/i]' , avg[/*###*/i]"
For( i = 1, i <= N Items( age ), i++,
Eval(
Expr(
var_rpt[i][FrameBox(1)] << Add Graphics Script(
Pen Color( "Red" ); H Line( avg[i] );
);
),
)
);Agradezco la ayuda y cualquier explicación, gracias!
Re: Cómo agregar un script de gráficos dinámicamente a un gráfico de variabilidad con varios cuadros de marcoLas expresiones son una característica poderosa en el lenguaje de secuencias de comandos JMP. recomiendo leer el documentación para familiarizarse más con su funcionamiento y su uso.
Aquí está la forma correcta de usar su último enfoque:
Names Default To Here( 1 );
// open example
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
// launch variability chart
var_chart = dt << Variability Chart( Y( :height ), X( :sex ), By( :age ), stddevchart( 0 ) );
// get summary in same order as By groups
Summarize( dt, age = by( :age ), avg = Mean( :height ) );
var_rpt = var_chart << Report;
// iterate over the list and add script using H Line() with the literal argument
For( i = 1, i <= N Items( age ), i++,
Eval(
Eval Expr(
var_rpt[i][FrameBox(1)] << Add Graphics Script(
Pen Color( "Red" ); H Line( Expr( avg[i] ) );
);
);
)
);
Cómo agregar un script de gráficos dinámicamente a un gráfico de variabilidad con múltiples cuadros de marcoHola a todos,
Entonces tengo un gráfico de variabilidad dividido por una agrupación "POR". Hice esta pregunta en https://community.jmp.com/t5/Discussions/How-to-add-Dynamic-horizontal-line-by-shared-y-axis-among/mp/622722 en el cual entiendo cómo el script de gráficos agregó las líneas respectivas en base a los valores de las tablas de datos. Estaba intentando adaptar este método al gráfico de variabilidad con más cuadros de marco y no puedo entender cómo hacerlo. Supongo que a partir de ahora es colocar cada By en un bucle for y agregar los gráficos al framebox respectivo de forma iterativa, pero no sé cómo hacerlo porque no estoy seguro de cómo acceder a un framebox de forma iterativa. Cualquier ayuda sería apreciada. ¡Gracias!
Utilice el rpt de abajo y potencialmente agregue un bucle for para que
//Potential for loop?<BR /><BR />rpt = dt << Variability Chart(
Y( :Head IC),
X( :Make, :Model ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
BY(:Name("D/P"))
);
<BR />//Subset data table by "By" condition to add the correct lines based on the condition.<BR />
tree = rpt << Report;
Eval( Eval Expr(
tree[FrameBox( 1 )] << Add Graphics Script(
Local( {values = Expr( category average ), numbers = Expr( category number ), i, items, sum = 0},
items = numbers << Get Keys;
Pen Size( 2 );
Pen Color( "Blue" );
Summation( i = 1, N Items( items ),
Line( Eval List( {sum, values[items[i]]} ), Eval List( {sum += numbers[items[i]], values[items[i]]} ) );
0
)
)
)
)
)Combinación y limpieza de datos