¿Cómo agregar líneas horizontales dinámicas con un eje y compartido en un gráfico de variabilidad con un eje x agrupado con valores repetidos de N diferente?Hola a todos,
Quería crear un nuevo hilo para diferenciarme según mi publicación anterior: https://community.jmp.com/t5/Discussions/How-to-add-Dynamic-horizontal-line-by-shared-y-axis-among /mp/622722 . Se debe aplicar la misma idea cuando quisiera una línea horizontal dinámica a través de un gráfico de variabilidad, pero a diferencia de la solución anterior que usa una matriz asociativa ya que hay un valor por x, este caso potencialmente tiene múltiples valores por agrupación x en la que se puede graficar. basado en N por x no funciona ya que N se divide entre condiciones y debe dibujarse como tal. Aquí es donde estoy luchando por descubrir cómo hacerlo y agradecería que alguien con más experiencia en secuencias de comandos gráficos me ayude si es posible. A continuación se muestra el resultado deseado con líneas dibujadas a mano, por ejemplo, y el código para generar el gráfico también se encuentra debajo.
En el siguiente ejemplo, Toyota ahora está dividido entre: Protección en la que hay N=8 y N=3 y, de la misma manera, Ford es N=11 y N=3 para las agrupaciones y me gustaría asegurarme de que tanto los grupos Toyota como los grupos Ford entre otros tienen una línea horizontal con el valor de Max(:Wt) como lo muestran las líneas roja y azul y todos los demás tienen una línea igualmente única como lo muestran las líneas violetas. Cualquier idea de cómo lograrlo sería fantástica. Al final de la publicación, el código proporcionado por @ErraticAttack se publica como una plantilla maravillosa para agrupar y crear gráficos, pero como es una matriz asociativa, diría que Toyota es N: 8+3 = 11 y, de la misma manera, Ford es 11+3=14. de ancho y graficar los rangos incorrectamente ya que ahora están divididos. 
dt = Open( "$SAMPLE_DATA/Cars.jmp" );
rpt = dt << Variability Chart(
Y( :Head IC),
X( :Protection, :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")),
);El código de @ErraticAttack para ayudar a mi pregunta anterior.
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 ),
Where( :NAME("D/P") == "Driver" & :Protection == "manual belts" ),
);
//find groupings:
rows = dt << Get Rows Where( :NAME("D/P") == "Driver" & :Protection == "manual belts" );
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 << 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
)
)
)
) )¡Gracias, realmente aprecio cualquier ayuda!
Automatización y secuencias de comandosAnálisis y modelado de datos básicosExploración y visualización de datosLa personalización en masaventanasRe: ¿Cómo agregar líneas horizontales dinámicas con un eje y compartido en un gráfico de variabilidad con un eje x agrupado con valores repetidos de N diferente?¡Gracias Jim!
Re: ¿Cómo agregar líneas horizontales dinámicas con un eje y compartido en un gráfico de variabilidad con un eje x agrupado con valores repetidos de N diferente?En la línea 37 necesitas cambiar de
fb = Report(varchart)[i][FrameBox(1)];
a
fb = Report( varchart[i] )[FrameBox( 1 )];
Re: ¿Cómo agregar líneas horizontales dinámicas con un eje y compartido en un gráfico de variabilidad con un eje x agrupado con valores repetidos de N diferente?Hola @jthi ,
Gracias por la solución, hay una respuesta bastante elegante. Como mencionaste, es solo para un Framebox e idealmente me gustaría que funcionara para ambos framebox que genera el gráfico de variabilidad. He adaptado su código a esto, pero no puedo lograr que aparezcan las líneas horizontales para ambos. Si pudiera ver el error y saber cómo solucionarlo, sería fantástico. ¡Gracias!
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cars.jmp");
varchart = dt << Variability Chart(
Y(:Head IC),
X(:Protection, :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(:"D/P"n)
);
dt << new column("Group", Character, Nominal, Formula(
:"D/P"n || :Protection || :Make // don't add model here
));
dt_summary = dt << Summary(
Group(:Group),
Max(:Wt),
N Categories(:Model),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0),
//Invisible
);
uniq = Associative Array( Column( dt, "D/P" ) << GetValues ) << GetKeys;
for(i = 1, i <= N Items(uniq), i++,
dt_summary_subset = dt_summary << Subset( Rows( dt_summary << get rows where(Substr(:Group, 1, Length(uniq[i])) == uniq[i])),
Columns(), Not Linked);
weights = dt_summary_subset[0, "Wt"];
counts = dt_summary_subset[0, "Model"];
fb = Report(varchart)[i][FrameBox(1)];
Eval(Eval Expr(
fb << Add Graphics Script(
Local({refs = Expr(weights), counts = Expr(counts), i, sum = 0},
Pen Size(2);
Pen Color("Blue");
Summation(i = 1, N Items(counts),
Line(Eval List({sum, refs[i]}), Eval List({sum += counts[i], refs[i]}));
);
)
)
));
);Re: ¿Cómo agregar líneas horizontales dinámicas con un eje y compartido en un gráfico de variabilidad con un eje x agrupado con valores repetidos de N diferente?Una opción bastante sencilla es crear una nueva columna para su grupo.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cars.jmp");
// for simplicity sake we drop Passenger
rows_to_delete = dt << Get Rows Where(:"D/P"n == "Passenger");
dt << Delete Rows(rows_to_delete);
varchart = dt << Variability Chart(
Y(:Head IC),
X(:Protection, :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(:"D/P"n)
);
dt << new column("Group", Character, Nominal, Formula(
:"D/P"n || :Protection || :Make // don't add model here
));
dt_summary = dt << Summary(
Group(:Group),
Max(:Wt),
N Categories(:Model),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0),
Invisible
);
weights = dt_summary[0, "Wt"];
counts = dt_summary[0, "Model"];
Close(dt_summary, no save);
fb = Report(varchart)[FrameBox(1)];
Eval(Eval Expr(
fb << Add Graphics Script(
Local({refs = Expr(weights), counts = Expr(counts), i, sum = 0},
Pen Size(2);
Pen Color("Blue");
Summation(i = 1, N Items(counts),
Line(Eval List({sum, refs[i]}), Eval List({sum += counts[i], refs[i]}));
);
)
)
));
Tenga en cuenta que este ejemplo tiene solo un cuadro de marco ya que se eliminan otros D/P