你好,
我有一個包含數十萬行的數據表。有一個運行 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 個不同的窗口。
非常感謝您的幫助。