Graph Builder: eje de cálculo Máx., Mín. y Rango para la colocación de anotaciones dinámicasHola comunidad JMP,
Tengo un script que traza datos de una serie de columnas en una tabla agrupada en función de una variable (:VAR_CAT) y que agrega dinámicamente texto de otra tabla, utilizando Graph Builder. Si bien esta secuencia de comandos funciona bien, he experimentado algunas dificultades con la ubicación vertical del texto agregado dinámicamente (consulte la secuencia de comandos a continuación).
Específicamente, probé diferentes enfoques que incluyen:
- YMax = Col Mean (YCOL) + (Col Std Dev (YCOL)/sqrt(Col Number(YCOL))); pero esto no funciona lo suficientemente bien porque devuelve el YMAX para toda la columna y no para el subconjunto definido por la variable Superposición --> ¿cuáles serían las líneas de código correctas para calcular dinámicamente el máximo real del eje Y para los datos agrupados en ¿Categorías superpuestas (sé que la opción "Por" solo funciona dentro de una estructura Para cada fila)?
- YMAX = informe (gb) [Axis Box (2)] << Get Max; que recupera el máximo real para el eje GB Y, pero este enfoque me obligaría a evaluar la expresión por segunda vez, lo que no parece eficiente ni elegante
Names Default to Here (1);
dt1 = Data Table ("DATA_TABLE.JMP");
dt2 = Data Table ("PVALUE_TABLE.JMP");
CList = dt1 << Get Column Names(string);
gbe = Expr (Graph Builder(
Size( 497, 507 ),
Variables(
X( :DURATION ),
Y( _YS_ ),
Overlay( :VAR_CAT ),
Interval( _ES_)
),
Elements( Points( X, Y, Legend( 9 ) ), Line( X, Y, Legend( 11 ) ) ),
SendToReport(
Dispatch(
{},
_LABEL_,
ScaleBox,
{Add Ref Line( 0, "Dotted", "Black", "", 2 )}
),
Dispatch(
{},
"DURATION",
ScaleBox,
{Min( -1.0 ), Max( 16 ), Inc( 2 ), Minor Ticks( 0 )}
),
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
9,
Base( 0, 0, 0, Item ID( "CAT1", 1 ) ),
Base( 1, 0, 0, Item ID( "CAT2", 1 ) )
)}
),
Dispatch(
{},
"Graph Builder",
FrameBox,
{Marker Size( 6 ), Add Graphics Script(
2,
Description( "Script" ),
Text( Center Justified, {3.8, _TP_}, _TXT1_ );
Text( Center Justified, {13.6, _TP_}, _TXT2_ );
), Grid Line Order( 1 ), Reference Line Order( 3 )}
)
)
)
);
For (i = 5, i <= 96, i++, //96
YCOL = Column (dt1, i);
ECOL = Column (dt1, i+92);
LBL = CList [i];
YMax = Col Mean (YCOL) + (Col Std Dev (YCOL)/sqrt(Col Number(YCOL)));
YMin = Col Mean (YCOL) - (Col Std Dev (YCOL)/sqrt(Col Number(YCOL)));
YRANGE = abs (YMax - Y Min);
If (YRANGE < 1.0,
YMax = YMax + 0.5;
YMin = YMin - 0.3
);
TOPY = YMax-0.1;
PVAL1 = "p VAL " || CHAR(Format(Column(dt2, 2)[i-4], "PValue"));
PVAL2 = "p VAL " || CHAR(Format(Column(dt2, 3)[i-4], "PValue"));
gbx = Substitute (Name Expr (gbe), Expr (_YS_), YCOL,
Expr (_ES_), ECOL,
Expr (_LABEL_), LBL,
Expr (_TP_), TOPY,
Expr (_TXT1_), PVAL1,
Expr (_TXT2_), PVAL2
);
gb = Eval (gbx);
Yaxis = report (gb)[Axis Box (2)];
LocYMin = Yaxis << Get Min;
LocYMax = Yaxis << Get Max;
LocRange = LocYMax - LocYMin;
mytitle = substitute (LBL, "Least Sq Mean LOG2 FC ", "");
report (gb) [OutlineBox (1)] << Set Title (mytitle);
if(abs (LocRange) < 1.0,
Yaxis << Max (LocYMax + 0.5);
Yaxis << Min (LocYMin - 0.3);
Yaxis << Inc (0.2),.);
gb << Journal;
gb << close window;
); Re: Creador de gráficos: calcular el eje Máx., Mín. y Rango para la colocación de anotaciones dinámicasTambién puede preguntar directamente al cuadro del eje:
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = Bivariate( Y( :weight ), X( :height ), FitLine );
rbiv = biv << report;
axisbox = rbiv[axis box( 1 )];
axisbox << Get Max;
(Desde Ayuda > Índice de secuencias de comandos)
Re: Creador de gráficos: calcular el eje Máx., Mín. y Rango para la colocación de anotaciones dinámicasPuede obtener el script para el cuadro del eje y luego encontrar los argumentos para las configuraciones Min() y Max().
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
biv = Bivariate( Y( :weight ), X( :height ), Fit Line( {Line Color( {212, 73, 88} )} ) );
y_axis_script = Report( biv )[axis box( 1 )] << get script;
/*
y_axis_script will be a list: {Scale( "Linear" ), Format( "Fixed Dec", 12, 0 ), Min( 60 ), Max( 180 ),
Interval( "Numeric" ), Inc( 20 ), Minor Ticks( 0 ), Label Row Nesting( 1 ),
Label Row(
{Automatic Font Size( 0 ), Automatic Tick Marks( 0 ), Inside Ticks( 0 ),
Label Alignment( "Near" ), Label Buffer Scale( 1 ),
Label Orientation( "Horizontal" ), Lax Label Range( 0 ),
Major Grid Line Color( -14145495 ), Minimum Depth( 0 ), Minimum Font Size( 8 ),
Minor Grid Line Color( -15790320 ), Show Major Grid( 0 ), Show Major Labels( 1 ),
Show Major Ticks( 1 ), Show Minor Grid( 0 ), Show Minor Labels( 0 ),
Show Minor Ticks( 1 ), Tick Offset( 0 ), Wrap Lines( 0 )}
)}
*/
//get the arguments for the 3rd and 4th elements of that list
minimum = Arg( y_axis_script[3], 1 );
maximum = Arg( y_axis_script[4], 1 );
Re: Creador de gráficos: calcular el eje Máx., Mín. y Rango para la colocación de anotaciones dinámicasHola,
Gracias por proporcionar esta sugerencia, pero no creo que resuelva mi problema. Es posible que no haya proporcionado una descripción clara de mi problema: lo que estoy tratando de lograr es calcular a partir de los datos o extraer de GB el máximo del eje Y para colocar con precisión el contenido dinámico del script de texto en el gráfico.
Tal vez quiso sugerir que debería usar un cuadro de título en lugar de un script de texto directo para anotar dinámicamente mis gráficos. Si es el caso, no estoy seguro de si es posible reemplazar dinámicamente el contenido de texto de un cuadro de título (por favor, corríjame si me equivoco).
Gracias por tu ayuda.
Sinceramente,
TSRe: Creador de gráficos: calcular el eje Máx., Mín. y Rango para la colocación de anotaciones dinámicasIntente agregar uno de estos a la lista de elementos del generador de gráficos:
Cuadro de título (Y, Leyenda (4), Estadística de resumen ("Máx."))
asi que:
gbe = Expr (Graph Builder(
Size( 497, 507 ),
Variables(
X( :DURATION ),
Y( _YS_ ),
Overlay( :VAR_CAT ),
Interval( _ES_)
),
Elements(
Points( X, Y, Legend( 9 ) ),
Line( X, Y, Legend( 11),
Caption Box( Y, Legend( 4 ), Summary Statistic( "Max" ) )<BR /> ) ),<BR />//the rest of your codePuede hacer esto visualmente haciendo clic derecho en Graph Builder y agregando un cuadro de título. Luego, en la lista de la izquierda, cambie las estadísticas de resumen a lo que necesita y cambie las variables que usa para el cálculo.