我观看了一个直播视频,并试图提出一个控制图,其中包括垂直线和注释(注释)。我明白了,但评论都搞砸了。我尝试了很多事情,但没有成功。能否请您查看附件,代码并让我知道问题出在哪里?
@Sebnem ,
我用了你的剧本。有两个主要问题。 JMP控制图使用X轴顺序,并使用TestDate定义标签。 因此,标签的x位置应为Row()-1,与垂直线相同。我注释掉“右对齐”,并使用负0.75来使标签位于垂直线的右侧。 删除对右对齐的注释,并将其设置为Row()-1,以使标签显示在垂直线的左侧。
第二个错误是y位置。1.2 * Col Maximum(:Avg)的乘积因子> 1500。 我添加了一个虚拟值,您可能要考虑Col Max(:Avg)+0.10 * Col Std Dev(:Avg)。
因此,您的问题是x和y pos。 这是使用列信息添加注释的简便方法。但是,这仅作为打开表时的日志。
假设您记录了结果图形的日志,请关闭数据表和控制图报告并进行任何更新,例如更改控制限制的线宽。行和注释都消失了。 或者,如果您保存日记本并发送给另一个日记本,或者在新的会话中打开它,则标签和行也消失了。
为了保持这些行和文本,必须使用值而不是对数据表的引用。 我将添加使用值和引用的第二个脚本。 但这应该显示您的脚本出了什么问题。
Control Chart(
Sample Label( :TestDate ),
Group Size( 1 ),
KSigma( 3 ),
Chart Col( :Avg, Individual Measurement ),
SendToReport(
Dispatch(
{"Individual Measurement of Avg"},
"IR Chart of IM",
FrameBox,
{Add Graphics Script( 2, Description( "Script" ), Empty() ),
Add Graphics Script(
3,
Description( "Script" ),
For Each Row(
If( Is Missing( :comment ) == 0,
V Line( Row() - 1 )
)
);
For Each Row(
If( Is Missing( :comment ) == 0,
Text(
//Right Justified,
{Row()-0.75, Col Maximum( :Avg )+ 1.005},
:Comment
)
)
);
), Grid Line Order( 5 ), Reference Line Order( 6 )}
)
)
);
@Sebnem ,
创建脚本(表达式)的方法有多种,它们具有垂直线和文本的嵌入式值,而不是对行和列的引用,
表达式的JSL函数[Substitute(),NameExpr(),EvalExpr(),Expr()]和将文本转换为JSL表达式的JSL字符函数[Concat(),ConcatTo(),Eval Insert()和Parse]很适合学习。
cc= Control Chart(
Sample Label( :TestDate ),
Group Size( 1 ),
KSigma( 3 ),
Chart Col( :Avg, Individual Measurement )
);
rcc = report(cc);
scrp = Expr(Add Graphics Script(3,
Description( "PM Labels" )));
//get y placement = axis max - 0.5* axis inc
ypos = (rcc[AxisBox(1)]<< Get Max) - 0.5* (rcc[AxisBox(1)] << Get Inc);
txtcmd = "";
For Each Row(
If( Is Missing( :comment ) == 0,
txtcmd ||= EvalInsert("\[
V Line( ^Row() -1^ );
Text(
//Right Justified,
{ ^Row() - .75^, ^ypos^},
"^:comment(Row())^");]\")
)//end if
); //end for each row
show (txtcmd ); //see log
InsertInto(scrp, Parse(txtcmd));
show (scrp ); //see log
txtxp = Substitute(Expr(rcc[FrameBox(1)] << cmd), Expr(cmd), NameExpr(scrp));
Show(NameExpr(txtxp));
Eval(txtxp);
注意,代替使用For Each Row(),可以使用idx = dt <<获取行,其中(!Is Missing(:comment))可以查找带有注释的较小行列表。
