Script grafico per rilevare il titolo del graficoVorrei impostare uno script grafico personalizzato in modo che ogni grafico ottenga una linea univoca basata sulle informazioni contenute in un array associativo. Nell'esempio seguente, voglio avere un grafico sulla linea in modo diverso per ogni categoria... per il mio uso effettivo, avrò bisogno del grafico per "riconoscere" l'intestazione in cui si trova in modo da poter utilizzare i valori corretti per la creazione della linea .
Per l'immagine di esempio qui sotto, ho aggiornato manualmente lo script grafico "F" in "F". Quindi sto cercando di trovare la sintassi per "raccogliere le informazioni sul grafico" ... nella mia testa, se riesco a prendere il titolo della casella di contorno, posso manipolarlo per ottenere ciò di cui ho bisogno ... ma non sono sicuro che sia l'unica/migliore opzione.
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 )
}
)
)
);

Personalizzazione di massaRi: Script grafico per rilevare il titolo del grafico@Mark_Bailey Grazie per quell'idea! È utile sapere che il riepilogo corrisponderà all'ordine di creazione dei grafici nel report. È qualcosa che posso vedere usi per molti dei miei script 
@Craige_Hales È un'idea davvero interessante con la funzione, dovrò giocarci anche io!
Ri: Script grafico per rilevare il titolo del graficoSe rendi l'intero script grafico una funzione, ottiene un file Questo parametro che è il frame box. Puoi salire fino al contorno per afferrare il titolo. Il vantaggio è sapere che hai il contorno contenente Questo grafico.
Outline title copied into graph by graphic scriptOutline title copied into graph by graphic scriptTitolo del contorno copiato nel grafico tramite script grafico
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>Ri: Script grafico per rilevare il titolo del graficoUn altro approccio potrebbe essere quello di determinare i valori prima di avviare Bivariate. La funzione Summarize() può essere utilizzata per determinare i livelli nello stesso ordine e appaiono quando si usa una variabile By o una clausola Where().
Summarize( level = By( :Group ) );
Il livello variabile memorizza un elenco di stringhe di tutti i livelli univoci nella colonna di dati :Group nell'ordine corretto. Quindi lo script grafico non ha bisogno di interrogare la casella di visualizzazione del contorno per scoprire dove si trova.
Ri: Script grafico per rilevare il titolo del graficoPotrebbe funzionare anche quello @jthi ... come scritto non sarebbe così dinamico come avrei bisogno a lungo termine, ma potrei usarlo per costruire una variabile iteratore personalizzata in modo che ogni grafico abbia la stessa variabile, ma impostata su un numero diverso, corrispondente alla sua posizione nel rapporto.
Grazie ancora a tutti per i loro pensieri!
Ri: Script grafico per rilevare il titolo del graficoEspansione su uno dei codici di @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 );
)));
);Ri: Script grafico per rilevare il titolo del graficoÈ affascinante che tu possa iniziare i a 0 e itera semplicemente "magicamente" in quel modo ... Ho incollato gli errori di seguito, ma sembra che almeno abbia funzionato. Ho creato un comando show(i) appena prima di creare la variabile graphInfo.
Sembra che abbia funzionato alla grande per i due grafici, ma per qualche motivo ha anche ripetuto altre due volte con conseguente incapacità di individuare biv[i] ... quindi ho racchiuso quella parte in un Try() e sembrava funzionare come necessario!
1) Non sono sicuro del motivo per cui "i" itera in questo modo o quando potrei potenzialmente utilizzarlo per altre funzioni in jsl
2) Non sono sicuro del motivo per cui sembra iterare altre due volte ... una per grafico, una per script grafico ??
3) Grazie mille per l'aiuto qui... Potrei non capire ancora come/perché funziona, ma se riesco a farlo funzionare in modo coerente, questa è la vittoria!

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 )
}
)
)
);Ri: Script grafico per rilevare il titolo del graficoProva questo
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 )
}
)
)
);Ri: Script grafico per rilevare il titolo del graficoÈ proprio così ... dall'interno dello script grafico stesso, posso conoscere queste informazioni?
Ottenere il titolo è facile dall'esterno.
Voglio essere in grado di inserire lo stesso identico script grafico in ogni grafico di un rapporto e fare in modo che lo script sia in grado di capire dove si trova.
Ri: Script grafico per rilevare il titolo del graficoDovrai sapere da quale Outline Box hai bisogno per ottenere il titolo, ma dopo è un semplice titolo di acquisizione
graph title = report( biv[1] )[OutlineBox(1)] << get title;
Ri: Script grafico per rilevare il titolo del graficoNon stavo cercando di aggiornare il titolo, ma di prendere le informazioni sul titolo... dall'interno del Graphics Script. Posso eseguire tutta la manipolazione delle stringhe una volta che ho le informazioni sul titolo.
Idealmente ho bisogno di qualcosa da inserire nello script grafico che è come "graphTitle = graph << get title;" e andare da lì, ma non sono sicuro che sia possibile a meno che l'oggetto non "sa" in quale parte dell'albero è contenuto...
Ri: Script grafico per rilevare il titolo del graficoEcco le modifiche al tuo script che aggiorneranno i titoli

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
)
)
);