JMP 社區您好;
在我尋求自動化註釋圖形生成器繪圖的一些更繁瑣的任務時,我嘗試使用以下腳本在數據組之間動態添加水平線段。 不幸的是,看起來我無法使用簡單的 Expr () 後跟 Substitute () 和 Eval () 來完成此特定任務。 注意:我正在處理敏感數據,因此如有必要,我需要創建模擬 DATA 和 STAT 表。
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;
);任何想法都會受到歡迎。
謝謝
您的解決方案對於這種情況來說是一個很好的解決方案,因為 HLine 和 VLine 是無限長的。 這是一個解釋和一些替代方案。
方括號矩陣是編譯時常量,不能使用變量。 我經常使用串聯運算符來構建這樣的小矩陣:
a = 17;
b = 23;
Show( a || b, a |/ b );
一個 || b = [17 23];
a |/ b = [17, 23];
您還可以使用矩陣():
matrix( {{a, b}, {a, a}} );[17 23, 17 17]
如果你的線需要限制在 0.2 和 1.8 之間,你可以使用不同形式的線,它採用列表而不是矩陣:
line( {x1,y1}, {x2,y2} )line 函數計算每個列表中的表達式。
而且,如果您需要以水平或垂直以外的某個角度無限長的線,您可以使用 YFunction():
YFunctionYFunctionY函數