你好,
我有一个包含数十万行的数据表。有一个运行 ID 列、一列设备名称(当前感兴趣的 29 个)和一列关联值。因此,对于每次运行,都有多个设备记录数据,我想为每个设备创建运行图表,并以运行 ID 作为 x 轴。但是,我有两个问题可以单独部分解决,但不能一起解决。
首先,我使用 JMP 13。我确实可以访问 JMP 16,但当前尚未安装。我有一大堆现有脚本,我不想通过更改为 JMP 的另一个版本来破坏它们,以及我想要做什么应该很容易做到。
其次,我尝试采取的一般方法如下:
- 循环遍历唯一设备名称列表并生成运行图;输入到每个单独的运行图控制和规格限制中,这些控制和规格限制是根据每个设备的数据确定的(我可以轻松地将控制和规格限制输入到控制图中)
- 将所有图表聚合到新窗口中
我用于绘图的脚本如下:
curDev = devices[i]<BR />dt << Control Chart(
Sample Label( :ID ),
KSigma( 3 ),
Where( :DeviceName == curDev ),
Chart Col( Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ), // lims list found separately
SendToReport(
Dispatch(
{"Levey Jennings of Value"},
curDev,
TextEditBox,
{Set Text( curDev )} // Ensures y-axis title is device name rather than column name of "Value"
)
)
);这会创建多个图形窗口,每个窗口顶部都有一个框,上面写着“Where Device == curDev”。
因此可以绘制图表,尽管有一个不必要且丑陋的框,但我打开了 29 个图表窗口。
所以现在我需要将它们全部聚合在一个窗口中并删除顶部的“Where Device ==”框。
论坛上有这样的回复,我认为会有帮助:如何从图形生成器报告窗口中删除“Where” - JMP 用户社区。事实上,如果我生成 29 个单独的图表,它确实会删除顶部的框,因此:
Build_Chart = Function({var},
cco = dt << Control Chart(
Sample Label( :ID ),
KSigma( 3 ),
Where( :Value == curDev ),
Chart Col( :Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ),
);
tp = Report(cco) << topparent;
tp[Textbox(1)] << delete;
);
for(i=1, i<=NItems(devices), i++,
curDev = devices[i]; //probably unnecessary
Build_Chart(curDev);
)但是,当我尝试执行链接论坛帖子中所述的相同操作时,我在窗口中得到 1 个图表,然后脚本错误“在访问或评估“发送”时,发送需要可编写脚本的对象{75240},tp[文本框(1)] <<删除/*###*/”
Build_Chart = Function({var},
// same function as above
)
pb = Panel Box();
for (i = 1, i<= NItems(devices), i++,
curDev = devices[i];
pb <<APPEND></APPEND>为什么将图表附加到面板框会与 Build_Chart 函数中的 tp << delete 发生冲突?
我尝试过的另一种方法如下所示,我得到一个报告对象:
nw = New Window("Charts",
lub = Lineup Box(NCol(2));
);
for (i = 1, i<= NItems(devices), i++,
curDev = devices[i];
cco = dtRecLog << Control Chart(
Sample Label( :ID ),
KSigma( 3 ),
Where( :Device == curDev ),
Chart Col( :Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ),
);
rep = cco << Report;
lub << Append(rep);
);这将创建一个包含 29 个图形的单独窗口,没有“Where ==”框,但它还生成 29 个独立的图形窗口。cco << 删除窗口不起作用,因为 cco 不是对窗口的引用。我可以做一个 Window(<窗口名称>) << 删除窗口,但我不知道窗口名称是什么,而且明显的猜测不起作用,所以我无法删除 JSL 中的窗口。
所以,我需要帮助的是以下内容:
- 创建一个包含所有图表的窗口,图表窗口上方没有“Where :Device == curDev”框
- 将所有图表聚合到一个窗口中
- 不会产生 29 个不同的窗口。
非常感谢您的帮助。
我相信您可以通过使用控制图上的“不可见”选项来转移到您的解决方案,然后将报告附加到独立的日志窗口。下面是对代码的修改,说明了执行此操作的方法。我无法测试该脚本,没有示例数据表,但我相信您将能够看到我的方法,我知道它会起作用。
Build_Chart = Function({var},
cco = dt << Control Chart(invisible,
Sample Label( :ID ),
KSigma( 3 ),
Where( :Value == curDev ),
Chart Col( :Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ),
);
tp = Report(cco) << topparent;
tp[Textbox(1)] << delete;
);
NW = New Window("Results",<<JOURNAL></JOURNAL>