Script graphique pour détecter le titre du graphiqueJe souhaite configurer un script graphique personnalisé afin que chaque graphique obtienne une ligne unique basée sur les informations contenues dans un tableau associatif. Dans l'exemple ci-dessous, je veux avoir un graphique sur la ligne différemment pour chaque catégorie... pour mon utilisation réelle, j'aurai besoin du graphique pour "reconnaître" l'en-tête sous lequel il se trouve afin que je puisse utiliser les valeurs correctes pour la création de ligne .
Pour l'exemple d'image ci-dessous, j'ai mis à jour manuellement le script graphique "F" en "F". Je cherche donc à trouver une syntaxe pour "rassembler les informations du graphique" ... dans ma tête, si je peux saisir le titre de la boîte de contour, je peux le manipuler pour obtenir ce dont j'ai besoin ... mais je ne sais pas si c'est la seule/meilleure option.
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 )
}
)
)
);

Personnalisation de masseRe : Script graphique pour détecter le titre du graphique@Mark_Bailey Merci pour cette idée ! Il est bon de savoir que le résumé correspondra à l'ordre dans lequel les graphiques seront créés dans le rapport. C'est quelque chose que je peux voir des utilisations dans plusieurs de mes scripts 
@Craige_Hales C'est une idée vraiment cool avec la fonction, je vais devoir jouer avec ça aussi !
Re : Script graphique pour détecter le titre du graphiqueSi vous faites du script graphique entier une fonction, il obtient un ce paramètre qui est la case frame. Vous pouvez grimper jusqu'au contour pour saisir le titre. L'avantage est de savoir que vous avez le plan contenant ce graphique.
Outline title copied into graph by graphic scriptOutline title copied into graph by graphic scriptTitre du plan copié dans le graphique par script graphique
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 graphique pour détecter le titre du graphiqueUne autre approche peut consister à déterminer les valeurs avant de lancer Bivariate. La fonction Summarize() peut être utilisée pour déterminer les niveaux dans le même ordre et ils apparaissent lors de l'utilisation d'une variable By ou d'une clause Where().
Summarize( level = By( :Group ) );
Le niveau variable stocke une liste de chaînes de tous les niveaux uniques dans la colonne de données :Groupe dans le bon ordre. Ainsi, votre script graphique n'a pas besoin d'interroger la zone d'affichage du contour pour savoir où elle se trouve.
Re : Script graphique pour détecter le titre du graphiqueça peut marcher aussi, @jthi ... tel qu'il est écrit, il ne serait pas aussi dynamique que j'en aurais besoin à long terme, mais je pourrais l'utiliser pour créer une variable d'itérateur personnalisée afin que chaque graphique ait la même variable, mais définie sur un nombre différent, correspondant à sa place dans le rapport.
Merci encore à tous pour vos réflexions !
Re : Script graphique pour détecter le titre du graphiqueDévelopper l'un des codes en @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 graphique pour détecter le titre du graphiqueC'est fascinant que vous puissiez démarrer i à 0 et que ça se répète "magiquement" comme ça... J'ai eu les erreurs collées ci-dessous, mais il semble en avoir au moins fonctionné. J'ai créé une commande show(i) juste avant de créer la variable graphInfo.
Cela semble avoir très bien fonctionné pour les deux graphiques, mais pour une raison quelconque, il a également itéré deux fois de plus, ce qui a entraîné une incapacité à localiser biv[i] ... alors j'ai enveloppé cette partie dans un Try() et cela semblait fonctionner comme nécessaire!
1) Je ne sais pas pourquoi "i" itère comme ça ou quand je pourrais potentiellement l'utiliser pour d'autres fonctions dans jsl
2) Je ne sais pas pourquoi il semble itérer deux fois de plus ... un par graphique, un par script graphique ??
3) Merci beaucoup pour l'aide ici... Je ne comprends peut-être pas encore comment / pourquoi cela fonctionne, mais si je peux le faire fonctionner de manière cohérente, c'est la victoire!

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 graphique pour détecter le titre du graphiqueEssaye ça
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 graphique pour détecter le titre du graphiqueC'est juste ça .... à partir du script graphique lui-même, puis-je connaître cette information ?
Obtenir le titre est facile de l'extérieur.
Je veux pouvoir placer exactement le même script graphique dans chaque graphique d'un rapport et faire en sorte que ce script puisse déterminer où il se trouve.
Re : Script graphique pour détecter le titre du graphiqueVous aurez besoin de savoir de quelle boîte de contour vous avez besoin pour obtenir le titre, mais après cela, il s'agit d'un simple titre d'obtention
graph title = report( biv[1] )[OutlineBox(1)] << get title;
Re : Script graphique pour détecter le titre du graphiqueJe ne cherchais pas à mettre à jour le titre, mais à saisir les informations sur le titre ... à partir du script graphique. Je peux faire toutes les manipulations de chaîne une fois que j'ai les informations sur le titre.
Idéalement, j'ai besoin de quelque chose à mettre dans le script graphique qui ressemble à "graphTitle = graph << get title;" et partir de là, mais je ne suis pas sûr que ce soit possible à moins que l'objet "sait" dans quelle partie de l'arbre il est contenu ...
Re : Script graphique pour détecter le titre du graphiqueVoici les modifications de votre script qui mettront à jour les titres

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