Salut la communauté JMP ;
Dans ma quête pour automatiser certaines des tâches les plus fastidieuses des tracés d'annotation Graph Builder, j'essaie d'ajouter dynamiquement des segments de ligne horizontale entre les groupes de données à l'aide du script suivant. Malheureusement, il semble que je ne puisse pas utiliser le simple Expr () suivi de Substitute () et Eval () pour cette tâche spécifique. Remarque : Je travaille avec des données sensibles. Par conséquent, je devrai créer des tables fictives DATA et STAT si nécessaire.
Names Default to Here (1);
dt1 = Data Table ("DATA.JMP");
dt2 = Data Table ("STAT.JMP");
gbe = Expr (dt1 << Graph Builder(
Size( 699, 625 ),
Variables(
X( :R vs NR ),
Y( _YS_ ),
Color( :R vs NR )
),
Elements(
Points( X, Y, Legend( 6 ) ),
Box Plot( X, Y, Legend( 8 ), Outliers( 0 ) )
),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Add Graphics Script(
2,
Description( "Script" ),
Pen Size (3);
// The following line of code return the error "Invalid Matrix Token"
Line ([0.2,0.8], [Y1, Y1]);
Text( Center Justified, {0.5, top1}, VAL1 );
// The following line of code return the error "Invalid Matrix Token"
Line ([0.2,1.8], [Y2, Y2]);
Text( Center Justified, {1.0, top2}, VAL2 );
// The following line of code return the error "Invalid Matrix Token"
Line ([1.2,1.8], [Y1, Y1]);
Text( Center Justified, {1.5, top1}, VAL3 );
), Grid Line Order( 1 ), Reference Line Order( 3 )}
)
)
)
);
For (i = 749, i <= 750, i++,
YCOL = Column (dt1, i);
PVAL1 = "p VAL = " || CHAR(format(Column (dt2, 2) [i-747],"PValue"));
PVAL2 = "p VAL = " || CHAR(format(Column (dt2, 3) [i-747],"PValue"));
PVAL3 = "p VAL = " || CHAR(format(Column (dt2, 4) [i-747],"PValue"));
data_topy1 = Col Quantile (YCOL, 0.99);
data_topy2 = Col Quantile (YCOL, 0.975);
gbx = Substitute(Name Expr (gbe),
Expr (_YS_), YCOL,
Expr (VAL1), PVAL1,
Expr (VAL2), PVAL2,
Expr (VAL3), PVAL3,
Expr (Y1), data_topy1,
Expr (Y2), data_topy2
);
gb = Eval (gbx);
gb << journal;
gb << close window;
);Toutes les idées seront les bienvenues.
Merci
Votre solution est excellente pour ce cas car HLine et VLine sont infiniment longues. Voici une explication et quelques alternatives.
La matrice entre crochets est une constante de compilation et ne peut pas utiliser de variables. J'ai souvent utilisé des opérateurs de concaténation pour construire de petites matrices comme celle-ci :
a = 17;
b = 23;
Show( a || b, a |/ b );
un || b = [17 23] ;
un |/ b = [17, 23] ;
Vous pouvez également utiliser matrix() :
matrix( {{a, b}, {a, a}} );[17 23, 17 17]
Si votre ligne devait être bornée à 0,2 et 1,8, vous pouvez utiliser une autre forme de ligne qui prend des listes plutôt que des matrices :
line( {x1,y1}, {x2,y2} )La fonction line évalue les expressions de chaque liste.
Et, si vous aviez besoin d'une ligne infiniment longue à un angle autre qu'horizontal ou vertical, vous pouvez utiliser la YFunction() :
YFunctionYFunctionFonction Y