Hallo JMP-Gemeinde,
In einem einfachen Skript, das ich gerade entwickle, möchte ich ein rechteckiges Polygon in Grafikskript zeichnen, das auf eine GraphBuilder FrameBox mit dynamischen Koordinaten in Funktion der Achsenskalierung angewendet wird (dh Polygon ([X1, X1, X2, X2], [Y1, Y2, Y2, Y1]). Während ich dies leicht mit "fest codierten" numerischen Koordinaten für das Polygon erreichen kann und ich die Werte von X1, X2, Y1 und Y2 einfach dynamisch berechnen kann; Ich war nicht in der Lage, die richtige Syntax in meinem Skript zu bestimmen, um diese Koordinaten dynamisch zu aktualisieren: Das folgende Skript funktioniert nicht wegen der falschen Behandlung des Koordinatenvektors.
Names Default to Here (1);
dt1 = Data Table ("TABLE1.JMP");
dt2 = Data Table ("TABLE2.JMP");
CList = dt1 << get column Names (string);
gbe = Expr (dt1 << Graph Builder(
Size( 838, 494 ),
Variables(
X( :COLUMNX ),
Y( _YS_ ),
Group X( :COLUMNSPLIT )
),
Elements(
Points( X, Y, Legend( 4 ) ),
Line Of Fit( X, Y, Legend( 6 ) ),
Ellipse( X, Y, Legend( 7 ) )
),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Left( 1 ), Right( 1 ), Top( 1 ), Bottom( 1 ),
Add Graphics Script(
2,
Description( "Script" ),
Fill Color( "white" );
Transparency( 0.6 );
Polygon( [-1, -1, 4.5, 4.5], _YVECTOR_ );
Transparency( 1 );
Text Size( 14 );
Text color ("black");
Text( right Justified, {4, _TPY1_}, _R1_ );
Text Color (_TXTC1_);
Text( right Justified, {4, _TPY2_}, _P1_ );
), Grid Line Order( 1 ), Reference Line Order( 3 )}
),
Dispatch(
{},
"Graph Builder",
FrameBox( 2 ),
{Left( 1 ), Right( 1 ), Top( 1 ), Bottom( 1 ),
Add Graphics Script(
2,
Description( "Script" ),
Fill Color( "white" );
Transparency( 0.6 );
Polygon( [-1, -1, 4.5, 4.5], _YVECTOR_ );
Transparency( 1 );
Text Size( 14 );
Text color ("black");
Text( right Justified, {4, _TPY1_}, _R2_ );
Text Color (_TXTC2_);
Text( right Justified, {4, _TPY2_}, _P2_ );
), Grid Line Order( 1 ), Reference Line Order( 3 )}
)
)
)
);
For (i = 10, i <= 13, i++, //101
YCOL = Column (dt1, i);
if (Column (dt2, 6) [i-9]<= 0.05, TEXTCOL1 = "red", TEXTCOL1 = "black");
if (Column (dt2, 7) [i-9]<= 0.05, TEXTCOL2 = "red", TEXTCOL2 = "black");
PVAL1 = "BH p: "|| CHAR(format(Column (dt2, 6) [i-9],"PValue"));
PVAL2 = "BH p: "|| CHAR(format(Column (dt2, 7) [i-9],"PValue"));
R1 = "r: "|| CHAR(format(Column (dt2, 4) [i-9],"Fixed Dec",6,3));
R2 = "r: "|| CHAR(format(Column (dt2, 5) [i-9],"Fixed Dec",6,3));
gbx = substitute(Name Expr (gbe), Expr (_YS_), YCOL,
Expr (_TPY1_), 1,
Expr (_TPY2_), 0.6,
Expr (__YVECTOR_),[1,0.5,0.5,1],
Expr (_TXTC1_), TEXTCOL1,
Expr (_TXTC2_), TEXTCOL2,
Expr (_P1_), PVAL1,
Expr (_P2_), PVAL2,
Expr (_R1_), R1,
Expr (_R2_), R2
);
gb = Eval (gbx);
gbr = gb << report;
Yaxis = gbr [Axis Box (2)];
YMax = YAxis << Get Max;
YMin = YAxis << Get Min;
gbr << close window;
YRange = ABS (YMax - YMin);
While (YRange <= 2,
YMax = YMax + (YRange * 0.2);
YMin = YMin - (YRange * 0.2);
YRange = abs (YMax - YMin);
);
TOPY1 = YMax - (YRange * 0.05);
TOPY2 = YMax - (YRange * 0.10);
POLY1 = YMax;
POLY2 = YMax - (YRange * 0.15);
POLYVECT = eval list ([POLY1, POLY2, POLY2, POLY1];
gbx = substitute(Name Expr (gbe), Expr (_YS_), YCOL,
Expr (_TPY1_), TOPY1,
Expr (_TPY2_), TOPY2,
Expr (_YVECTOR_), POLYVECT,
Expr (_TXTC1_), TEXTCOL1,
Expr (_TXTC2_), TEXTCOL2,
Expr (_P1_), PVAL1,
Expr (_P2_), PVAL2,
Expr (_R1_), R1,
Expr (_R2_), R2
);
gb = Eval (gbx);
gbr = gb << report;
Yaxis = gbr [Axis Box (2)];
Yaxis << Max (YMax);
Yaxis << Min (YMin);
Yaxis << Inc (round (YRange/9, 1));
gbr << Set Title (CList [i]);
gbr << Journal;
gbr << close window;
);
Danke für Ihre Hilfe.
Am besten,
TS