Script de gráficos para detectar el título del gráficoMe gustaría configurar un script de gráficos personalizado para que cada gráfico obtenga una línea única basada en la información contenida en una matriz asociativa. En el siguiente ejemplo, quiero tener un gráfico en la línea diferente para cada categoría... para mi uso real, necesitaré que el gráfico "reconozca" el encabezado bajo el que se encuentra para poder usar los valores correctos para la creación de la línea. .
Para la imagen de ejemplo a continuación, actualicé manualmente el script de gráficos "F" para que sea "F". Así que busco encontrar la sintaxis para "reunir la información del gráfico"... en mi cabeza, si puedo agarrar el título del cuadro de esquema, puedo manipularlo para obtener lo que necesito... pero no estoy seguro de si eso es la única/mejor opción.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt << Bivariate(
Y( :height ),
X( :weight ),
By( :sex ),
SendToReport(
Dispatch(
{},
"1",
ScaleBox,
{Format( "Fixed Dec", 12, 0 ), Min( 30 ), Max( 180 ), Inc( 20 ),
Minor Ticks( 1 )}
),
Dispatch(
{},
"Bivar Plot",
FrameBox,
{Add Graphics Script(
2,
Description( "" ),
test = Associative Array( {{"F", {0.1, 50}}, {"M", {.8, 0}}} );
///gather graph info to get "F" or "M" from output
graphInfo = "M";// need to extract so it's "F" for female graph
Y Function( test[graphInfo][1] * x + test[graphInfo][2], x );
), Grid Line Order( 1 ), Reference Line Order( 3 )
}
)
)
);

Gráficossecuencias de comandosRe: Script de gráficos para detectar el título del gráfico@Mark_Bailey ¡Gracias por esa idea! Es bueno saber que resumir coincidirá con el orden en que se crearán los gráficos en el informe. Eso es algo para lo que puedo ver usos en varios de mis scripts 
@Craige_Hales Esa es una idea genial con la función, ¡tendré que jugar con eso también!
Re: Script de gráficos para detectar el título del gráficoSi hace que todo el guión gráfico sea una función, obtiene un este parámetro que es el cuadro de marco. Puedes subir hasta el contorno para agarrar el título. El beneficio es saber que tienes el esquema que contiene este grafico.
Outline title copied into graph by graphic scriptOutline title copied into graph by graphic scriptTítulo del esquema copiado en el gráfico por script gráfico
dt = Open( "$sample_data/big class.jmp", invisible );
bv = dt << Bivariate( Y( :weight ), X( :height ), Fit Line );
(bv << report)[framebox( 1 )] << addgraphicsscript(
// if a function is used, it must be the only statement in the graphic script
Function( {this},{titlebox=this},
// the function can use this to find the frame box, climb to an Outline title...
While( (titlebox << classname) != "OutlineBox", titlebox = titlebox << parent );
// then other graphics commands
Text( center justified, {60, 120}, (titlebox << gettitle) );
Circle( {60, 120}, 30 );
this<<BACKGROUNDCOLOR></BACKGROUNDCOLOR>Re: Script de gráficos para detectar el título del gráficoOtro enfoque podría ser determinar los valores antes de iniciar Bivariate. La función Summarize() se puede utilizar para determinar los niveles en el mismo orden y aparecen cuando se usa una cláusula By variable o Where().
Summarize( level = By( :Group ) );
El nivel variable almacena una lista de cadenas de todos los niveles únicos en la columna de datos :Group en el orden correcto. Por lo tanto, su secuencia de comandos de gráficos no necesita consultar el cuadro de visualización del esquema para averiguar dónde está.
Re: Script de gráficos para detectar el título del gráficoEso también podría funcionar, @jthi ... tal como está escrito, no sería tan dinámico como lo necesitaría a largo plazo, pero podría usarlo para crear una variable iteradora personalizada para que cada gráfico tenga la misma variable, pero establecida en un número diferente, correspondiente a su lugar en el informe
¡Gracias de nuevo a todos por sus pensamientos!
Re: Script de gráficos para detectar el título del gráficoAmpliando uno de los códigos por @txnelson :
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
test = Associative Array( {{"F", {0.1, 50}}, {"M", {.8, 0}}} );
biv = dt << Bivariate(
Y( :height ),
X( :weight ),
By( :sex ),
SendToReport(
Dispatch(
{},
"1",
ScaleBox,
{Format( "Fixed Dec", 12, 0 ), Min( 30 ), Max( 180 ), Inc( 20 ),
Minor Ticks( 1 )}
),
Dispatch(
{},
"Bivar Plot",
FrameBox,
{Grid Line Order(1 ), Reference Line Order( 3)}
)
)
);
rep = biv << Get As Report;
For( i = 1, i <= N Items(rep), i++,
keyForAa = Substr(Report(rep [i])[Outline Box( 1 )] << get title,
Contains(Report(rep [i])[Outline Box( 1 )] << get title, "=" ) + 1);
//see Add Graphics Script example from Scripting Index
framebox = Report(rep [i])[frame box(1)];
Eval(EvalExpr(framebox << Add Graphics Script(
2,
Description( "" ),
Y Function(Expr(test[keyForAa][1]) * x + Expr(test[keyForAa][2]), x );
)));
);Re: Script de gráficos para detectar el título del gráficoEs fascinante que puedas comenzar i en 0 y simplemente 'mágicamente' itera así... Obtuve los errores pegados a continuación, pero parece que al menos funcionó. Creé un comando show(i) justo antes de crear la variable graphInfo.
Parece haber funcionado muy bien para los dos gráficos, pero por alguna razón también iteró dos veces más, lo que resultó en la imposibilidad de localizar biv[i]... así que envolví esa parte en Try() y pareció funcionar como ¡necesario!
1) No estoy seguro de por qué "i" itera así o cuándo podría utilizarlo para otras funciones en jsl
2) No estoy seguro de por qué parece iterar dos veces más... ¿una por gráfico, una por secuencia de comandos de gráficos?
3) Muchas gracias por la ayuda aquí... Puede que todavía no entienda cómo/por qué funciona, pero si puedo hacer que funcione de manera consistente, ¡esa es la victoria!

Names default to here(1);
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
i=0;
biv = dt << Bivariate(
Y( :height ),
X( :weight ),
By( :sex ),
SendToReport(
Dispatch(
{},
"1",
ScaleBox,
{Format( "Fixed Dec", 12, 0 ), Min( 30 ), Max( 180 ), Inc( 20 ),
Minor Ticks( 1 )}
),
Dispatch(
{},
"Bivar Plot",
FrameBox,
{Add Graphics Script(
2,
Description( "" ),
i++;
test = Associative Array( {{"F", {0.1, 50}}, {"M", {.8, 0}}} );
///gather graph info to get "F" or "M" from output
show(i);
Try(
graphInfo = word(2,report(biv[i])[OutlineBox(1)] << get title,"=");
show(graphinfo);
);
Y Function( test[graphInfo][1] * x + test[graphInfo][2], x );
), Grid Line Order( 1 ), Reference Line Order( 3 )
}
)
)
);Re: Script de gráficos para detectar el título del gráficoPrueba esto
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
i=0;
biv = dt << Bivariate(
Y( :height ),
X( :weight ),
By( :sex ),
SendToReport(
Dispatch(
{},
"1",
ScaleBox,
{Format( "Fixed Dec", 12, 0 ), Min( 30 ), Max( 180 ), Inc( 20 ),
Minor Ticks( 1 )}
),
Dispatch(
{},
"Bivar Plot",
FrameBox,
{Add Graphics Script(
2,
Description( "" ),
i++;
test = Associative Array( {{"F", {0.1, 50}}, {"M", {.8, 0}}} );
///gather graph info to get "F" or "M" from output
graphInfo = word(2,report(biv[i])[OutlineBox(1)] << get title,"=");
show(graphinfo);
Y Function( test[graphInfo][1] * x + test[graphInfo][2], x );
), Grid Line Order( 1 ), Reference Line Order( 3 )
}
)
)
);Re: Script de gráficos para detectar el título del gráficoEso es todo.... desde el propio script de gráficos, ¿puedo saber esa información?
Conseguir el título es fácil desde fuera.
Quiero poder colocar exactamente el mismo script de gráficos en cada gráfico de un informe y que ese script pueda averiguar dónde está.
Re: Script de gráficos para detectar el título del gráficoDeberá saber de qué cuadro de esquema necesita obtener el título, pero después de eso, es un título simple de obtener
graph title = report( biv[1] )[OutlineBox(1)] << get title;
Re: Script de gráficos para detectar el título del gráficoNo buscaba actualizar el título, sino obtener la información del título... desde el script de gráficos. Puedo hacer toda la manipulación de cadenas una vez que tengo la información del título.
Idealmente, necesito algo para poner dentro de la secuencia de comandos de gráficos que sea como "graphTitle = graph << get title;" e ir desde allí, pero no estoy seguro de que eso sea posible a menos que el objeto "sabe" en qué parte del árbol está contenido ...
Re: Script de gráficos para detectar el título del gráficoAquí están las modificaciones a su script que actualizarán los títulos.

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
biv = dt << Bivariate(
Y( :height ),
X( :weight ),
By( :sex ),
SendToReport(
Dispatch(
{},
"1",
ScaleBox,
{Format( "Fixed Dec", 12, 0 ), Min( 30 ), Max( 180 ), Inc( 20 ),
Minor Ticks( 1 )}
),
Dispatch(
{},
"Bivar Plot",
FrameBox,
{Add Graphics Script(
2,
Description( "" ),
test = Associative Array( {{"F", {0.1, 50}}, {"M", {.8, 0}}} );
///gather graph info to get "F" or "M" from output
graphInfo = "M";// need to extract so it's "F" for female graph
Y Function( test[graphInfo][1] * x + test[graphInfo][2], x );
), Grid Line Order( 1 ), Reference Line Order( 3 )}
)
)
);
For( i = 1, i <= N Items( biv ), i++,
Report( biv[i] )[Outline Box( 1 )] << set title(
Substr(
Report( biv[i] )[Outline Box( 1 )] << get title,
Contains( Report( biv[i] )[Outline Box( 1 )] << get title, "=" ) + 1
)
)
);