你好,
我有一个包含数十万行的数据表。有一个运行 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"
)
)
);这会创建多个图形窗口,每个窗口顶部都有一个框,上面写着“设备 == curDev”。
因此可以绘制图形,尽管带有一个不必要且丑陋的框,但我打开了 29 个图形窗口。
所以现在我需要将它们全部聚合在一个窗口中并删除顶部的“Where Device ==”框。
论坛上有这样的回复,我认为会有所帮助:如何从图表生成器报告窗口中删除“位置” - 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)] << delete/*###*/”
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 << Delete Window 不起作用,因为 cco 不是对窗口的引用。我可以做了一个Window() << Delete Window,但是我不知道窗口名称是什么,而且明显的猜测不起作用,所以我无法在JSL中删除窗口。
所以,我需要帮助的是以下几点:
- 创建一个包含所有图表的窗口,图表窗口上方没有“Where :Device == curDev”框
- 将所有图表聚合到一个窗口中
- 不产生 29 个不同的窗口。
非常感谢您的帮助。