您可能已经阅读了题为“ 根据分组列而不同的流程规范限制”的博客文章,并认为
该帖子向您展示了如何在单个报告窗口中基于分组列获取能力分析。但是,读完该帖子后,
您可能已经意识到该帖子给出了您想要的分析,但每个阶段都给出了单独的控制图。
也许您真正寻找的是图表上绘制有规格限值的单相控制图……
JMP的一大特色是其灵活的脚本语言。通过使用JMP 脚本语言 (JSL) ,您可以创建所需的图形类型。这篇博文详细介绍了生成该单相控制图所需的脚本,并在图形上绘制了规格限值。
示例:在书籍中打印文本
在我的博客文章“ 基于分组列而不同的流程规范限制”中,我介绍了一个来自印刷过程的示例。让我们回顾一下这个例子。印刷过程中的变化可能会导致线条变形,包括倾斜、厚度和长度问题。对于这个例子,我们将考虑线条的长度。如果线条太长,句子可能会超出页面。如果线条太短,页面上会浪费很多空间。
对于此特定数据,我们有两种不同的书籍尺寸。精装书的宽度为 17.78 厘米。平装书的宽度为 13.97 厘米。如果精装书的印刷长度为 16 厘米 +/- 0.2 厘米,则认为其行长良好。如果平装书的印刷长度为 12 +/- 0.4 厘米,则认为其行长良好。在每次印刷中,都会对第一本和最后一本书进行测量。在每本书中间的指定页面上测量行长。

分析
要为该示例创建阶段控制图,请从“质量和过程”菜单中选择“控制图生成器”。将“长度”拖到 Y。将“类型”拖到“阶段”。将“运行”拖到 x 轴。

我们从题为“ 基于分组列而不同的流程规范限制”的博客文章中了解到,我们不能使用规范限制列属性或规范限制命令,因为这些命令适用于整个列(在本例中为长度)。这意味着两个阶段将具有相同的规范限制,这不是我们想要的。因此,我们必须通过脚本添加这些。
获取控制图脚本
要获取生成此图表的脚本,请从控制图生成器旁边的红色三角形中选择“将脚本保存到脚本窗口”。您将获得以下脚本。
Control Chart Builder(
Show Capability( 0 ),
Variables( Subgroup( :Run ), Y( :Length ), Phase( :Type ) ),
Chart( Position( 1 ) ),
Chart( Position( 2 ) ),
SendToReport(
Dispatch(
{},
"Control Chart Builder",
FrameBox,
{DispatchSeg(
TextSeg( 3 ),
{Line Color( "None" ), Fill Color( "None" )}
), DispatchSeg(
TextSeg( 4 ),
{Line Color( "None" ), Fill Color( "None" )}
)}
)
)
);
为了使脚本更强大、更易于使用,我们将向此脚本添加一些内容。我们在脚本之前添加代码以打开必要的数据表(实际数据和规格限值表,我们将在后面讨论)、为脚本分配句柄、将脚本指向感兴趣的数据表,并为报告添加句柄。
dt=Open("SpecChange.jmp"); //actual data
dtSpec=Open("specChangelimits.jmp"); //data containing specification limits
obj=dt<<CONTROL chart="" builder=""></CONTROL>
<P> </P>
<P>接下来,我们必须弄清楚如何将规范限制添加到这个现有的脚本中。</P>
<H3 id="toc-hId--476198926" id="toc-hId--1762693415">H线命令</H3>
<P>在<A href="https://www.jmp.com/en_us/software/data-analysis-software.html" target="_self" rel="noopener noreferrer">JMP</A>中,默认情况下,规格限值线会作为参考线添加。您可以考虑通过 JSL 添加参考线。如果您尝试这样做,您会发现这也无法满足您的要求。与前面提到的方法一样,参考线适用于整个图表,因此会存在于两个阶段(精装本和平装本)。相反,我们可以通过线段为每个阶段完成单独的规格线。我们要使用的特定线段是 H Line。H Line 命令具有以下形式:</P>
<P> </P>
<CODE class=" language-jsl">H Line( x1, x2, y);
它在 y 处从 x1 到 x2 绘制一条贯穿整个框架的水平线。
确定 x1 和 x2 的值
我们可以利用 JMP 已知的信息。控制图已经知道精装本和平装本的 x1 和 x2 是什么,因为它已经在图表上绘制了控制限值线。我们可以使用这些现有的线段来确定 x1 和 x2。
actLineSeg=(rpt[FrameBox(2)]<<XPATH>0, //if the description contains the word average
actx=Insert(actx , arg(actLineSeg,i)<<GET x="" values=""></GET></XPATH>
<P>在上面的代码中,我们首先找到位置图的线段。接下来,我们获取每个线段的描述。我们创建两个列表 actx 和 actPhase。当描述包含单词“Average”时,线段的 x 值存储在 actx 中,相位标签存储在 actPhase 中。</P>
<H3 id="toc-hId-1298808436" id="toc-hId-1722927255">获取 H 线的 y 参数</H3>
<P>您用来获取 y 的方法将取决于您存储此信息的方式。出于本示例和博客文章的目的,我们将假设此信息存储在单独的数据表中,就像博客文章“ <A href="https://community.jmp.com/t5/JMPer-Cable/Process-specification-limits-that-differ-based-on-a-grouping/ba-p/36656" target="_self">根据分组列而不同的流程规范限制</A>”中一样。</P>
<P> </P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="specChange2.png" style="width: 297px;"><span class="lia-inline-image-display-wrapper" image-alt="specChange2.png" style="width: 297px;"><img src="https://us.v-cdn.net/6038925/uploads/images/5995i8FBEFD91C35B15EE/specChange2.png" role="button" title="specChange2.png" alt="specChange2.png" /></span></SPAN></P>
<P> </P>
<P>我们需要将 actPhase 的值(使用上一个脚本获得)与规格限值数据表中的“Type”列进行匹配。您的相位变量并不总是被称为“Type”。为了使 JSL 更通用,以便可以在其他示例中使用,我们可以从控制图构建器报告中获取相位变量的名称。具体来说,我们可以从图表正上方显示的相位标签中提取此信息。</P>
<P> </P>
<CODE class=" language-jsl">actPhaseName=(rpt[GraphBuilderBox(1)]<<XPATH></XPATH>
<P>确定规格限值表中的相应行后,我们可以从规格限值数据表中的 LSL、Target 和 USL 列中获取规格下限、目标和规格上限的值。</P>
<P> </P>
<CODE class=" language-jsl">for(j=1, j<=narg(actx),j++, //for every argument of actx
for(k=1, k<=nrows(dtSpec), k++, //for every row of the specification data table
if(arg(actPhase,j)==Column(dtSpec, actPhaseName)[k],
//if actPhase is equal to Type in the specification table
H Line( arg(actx,j)[1], arg(actx,j)[2], Column(dtSpec, "LSL")[k] );
H Line( arg(actx,j)[1], arg(actx,j)[2], Column(dtSpec, "Target")[k]);
H Line( arg(actx,j)[1], arg(actx,j)[2], Column(dtSpec, "USL")[k] );
);
);
);
图形脚本
我们如何在脚本中使用 H 线?HLine 命令需要包含在图形脚本命令中。图形脚本是我们向报告窗口内的现有框架添加图形项目的方式。我们将向脚本添加描述,并为规格限值线选择笔颜色。我们还可以根据需要确定网格线顺序和参考线顺序。图形脚本可以通过 SendTo Report 命令发送到控制图生成器窗口。
obj<<SENDTOREPORT></SENDTOREPORT>
<H3 id="toc-hId--1221151498" id="toc-hId-913580629">结论</H3>
<P>将所有这些部分放在一起,我们得到了以下完成的脚本:</P>
<P> </P>
<CODE class=" language-jsl">dt=Open("SpecChange.jmp"); //actual data
dtSpec=Open("specChangelimits.jmp"); //data containing specification limits
obj=dt<<CONTROL chart="" builder="">0, //if the description contains the word average
actx=Insert(actx , arg(actLineSeg,i)<<GET x="" values=""></GET></CONTROL>
<P>运行此脚本将产生以下结果。</P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Note: The specification limits are difficult to see for hardcover since all lines are so close together. You can alter the Y axis through the interface or JSL so that the lines can be seen more clearly if necessary." style="width: 686px;"><span class="lia-inline-image-display-wrapper" image-alt="Note: The specification limits are difficult to see for hardcover since all lines are so close together. You can alter the Y axis through the interface or JSL so that the lines can be seen more clearly if necessary." style="width: 686px;"><img src="https://us.v-cdn.net/6038925/uploads/images/5996i6790A59F4F9F1592/specchangefinished.png" width="686" height="346" role="button" title="specchangefinished.png" alt="Note: The specification limits are difficult to see for hardcover since all lines are so close together. You can alter the Y axis through the interface or JSL so that the lines can be seen more clearly if necessary." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Note: The specification limits are difficult to see for hardcover since all lines are so close together. You can alter the Y axis through the interface or JSL so that the lines can be seen more clearly if necessary.</span></span><SPAN class="lia-inline-image-caption" onclick="event.preventDefault();">注意:精装书的规格限值很难看出,因为所有线条都靠得很近。如果需要,您可以通过界面或 JSL 改变 Y 轴,以便更清楚地看到线条。</SPAN></SPAN></P>
<P>从上图可以看出,精装书有一组规格限值(15.98、16、16.02),平装书有一组不同的规格限值(11.6、12、12.4)。</P>
<P>此脚本是通用的,因为您可以拥有任意数量的阶段级别,级别可以随意命名,阶段列也可以随意命名。但是,此脚本确实要求将您的规格限值存储在单独的数据表中。规格限值数据表要求每个阶段级别有 1 行。阶段级别名称必须与 CCB 报告中显示的级别名称相匹配。数据表必须包含标题为 LSL、目标和 USL 的列,分别存储规格下限、目标和规格上限。</P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="cartoon_thought_bubble_3.jpg" style="width: 150px;"><span class="lia-inline-image-display-wrapper" image-alt="cartoon_thought_bubble_3.jpg" style="width: 150px;"><img src="https://us.v-cdn.net/6038925/uploads/images/6004i22873971DFC74A41/cartoon_thought_bubble_3.jpg" role="button" title="cartoon_thought_bubble_3.jpg" alt="cartoon_thought_bubble_3.jpg" /></span></SPAN></P>