我观看了一个直播视频,并尝试制作一个包含垂直线和注释(注释)的控制图。 我明白了台词,但评论全乱了。 我尝试了很多事情但没有成功。 您能查看附件、代码并让我知道问题是什么吗?
@塞布内姆,
有多种方法可以创建具有垂直线和文本的嵌入值的脚本(表达式),而不是对行和列的引用,
用于表达式的 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);
请注意,可以使用 idx= dt << get rows where ( !Is Missing( :comment ) ) 来查找带有注释的较小行列表,而不是使用 For Each Row() 。

@塞布内姆,
我用了你的脚本。 有两个主要问题。JMP 控制图使用 X 轴序列,而 TestDate 用于定义标签。所以标签的 x 位置应该是 Row() - 1,与垂直线相同。 我注释掉了右对齐,并使用负 0.75 使标签位于垂直线的右侧。删除 Right Justified 上的注释并将其设置为 Row() - 1,以便标签显示在垂直线的左侧。
第二个错误是 y 位置。 您的乘数 1.2*Col Maximum(:Avg) 大于 1500。我添加了一个虚拟值,您可能需要考虑 Col Max(:Avg) +0.10 * Col Std Dev(:Avg)。
所以你的问题是 x 和 y 位置。这是使用列信息添加注释的简单方法。 但是,这只是表打开时的日志。
假设您记录了生成的图表,关闭数据表和控制图报告,并进行任何更新,例如更改控制限的线宽。台词和评论都消失了。或者,如果您保存日记并发送给另一个人或在新会话中打开它,标签和线条也会消失。
为了维护这些行和文本,必须使用值,而不是对数据表的引用。我将添加第二个使用值和引用的脚本。但这应该显示您的脚本出了什么问题。
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 )}
)
)
);