事件線和控製圖註釋
用已知事件註釋控製圖? 我不斷遇到需要向圖表添加事件線的情況。 這些與階段不同,因為我不需要重新計算平均值和控制限,我只需要一個標記來表明發生了某些事情。 在某些情況下,我需要以方便的自動化方式在圖表上標記點。 該博客介紹了幾個可以添加到控製圖表圖形中的腳本,這些腳本有助於繪製事件線並向圖形添加註釋。

自定義圖表的第一步是在圖表內部右鍵單擊並選擇“自定義”,然後將出現“自定義圖表”對話框。 單擊左上角的“+”圖標將打開一個空白腳本,您可以在其中粘貼下面討論的示例。第一個示例要求您的表中有一個名為“Comment”的字符列。 當此列中有一個值時,它將導致在圖表上繪製一條垂直線,如上例所示。

第二步是查看可以添加到此窗口的幾個自定義腳本。 每組指令或參數必須用分號連接在一起。 了解如何在圖表中使用這些自定義腳本的一個好地方是對話框窗口中的“示例和模板”下拉列表。 此外,“幫助”選項卡下的“腳本索引”包含每個功能的詳細信息。 請記住,這個小腳本窗口是有限的,因此在應用更改後,請考慮將報告腳本保存到腳本窗口以繼續編輯。 添加到圖表中的所有自定義腳本也將顯示在報表對像腳本中。 通過此對話框可以輕鬆添加到圖表,而無需了解太多 JSL 以及如何操作報表對象的腳本。
自定義圖形腳本 1:添加線條
For Each Row( If( Is Missing( :Comment ) == 0, V Line( row() ) ) );
解釋:
- For Each Row():這使得公式在每一行而不是列級別進行計算。
- Is Missing():如果該行為空,則該函數返回“0”,否則返回“1”。 如果該行未丟失(即 =“0”),則評估 V 線並繪製一條線。
- V Line():檢查該腳本的索引,有很多有趣的選項可供使用。 在本例中,我只給它一個數字,因此它將在該數字處在整個框架上繪製一條垂直線。 (沒有號碼吧?)
- Row():該函數返回行號。 我使用這個行號作為穿過框架繪製垂直線的位置。
自定義圖形腳本 2:向線條添加標籤
For Each Row( If( Is Missing( :Comment ) == 0, Text( Right Justified, {row(),
Col Maximum( :Data ) * 1.2},:Comment)));
解釋:
- For Each Row():這使得公式在每一行而不是列級別進行計算。
- If():這是一個經典的“If、Then、Else”函數。 如果條件為真,則執行第一件事,否則執行第二件事。 除了這裡沒有“其他”,所以如果條件為真,那麼第一件事就會發生,否則什麼也不會發生。
- Is Missing():如果該行為空,則該函數返回“0”;如果不是,則返回“1”。 在這裡,如果該行丟失,則不會發生任何事情,但如果不丟失,則對文本函數進行求值。
- Text():再次檢查腳本索引,了解可以包含在此處的所有參數,以及一些很好的示例。 這裡我們要把文本放在坐標Y和X處,文本在:Comment欄中。
- Row() 是 x 位置,y 位置是 :Data 列的最大值 (Col Maximum()) 乘以 1.2。 這使得文本顯示在數據點上方一點。
自定義圖形腳本 3:向數據點添加標籤。
僅使用列和行屬性來標記數據點可能更好、更容易,但在某些情況下,像這樣的腳本解決方案的複雜程度可以接受。
For Each Row(If( Is Missing( :Note ) == 0, If( :Data <= Col Mean( :Data ),
Text( Right Justified,{Row(),:Data-:Data*1.1}, :Note ),
Text( Right Justified,{Row(),:Data * 1.1}, :Note ))));
解釋:
- 這有點花哨。 該表達式中有一個嵌套的 If 語句。 如果 Note 未缺失且 :Data 小於或等於 :Data 的列平均值,則使 :Note 中的文本位於數據點下方,否則使 :Note 中的文本位於數據點上方。
- 這種方式在圖表中看起來更好,但在這個示例中,它開始看起來比需要的更複雜一些。
- 一個更簡單的版本如下所示:
For Each Row(If( Is Missing( :Note ) == 0, Text( Right Justified,{Row()+1,:Data}, :Note );
“row()+1”將文本移動到數據點的右側
控製圖腳本示例
該腳本的表格需要具有以下列,附有示例表格。
- ID,連續行號
- 數據,包含趨勢數據的列
- 註釋,垂直線的稀疏註釋列
- 註釋,特定數據點的稀疏註釋列
該腳本生成上圖中的控製圖。
Control Chart(
Sample Label( :ID ),
Group Size( 1 ),
KSigma( 3 ),
Chart Col( :Data, Individual Measurement ),
SendToReport(
Dispatch(
{"Individual Measurement of Data"},
"IR Chart of IM",
FrameBox,
{Frame Size( 800, 200 ), Add Graphics Script(
1,
Description( "Script" ),
For Each Row( If( Is Missing( :Comment ) == 0, V Line( Row() ) ) );
For Each Row(
If( Is Missing( :Comment ) == 0,
Text( Right Justified, {Row(), Col Maximum( :Data ) * 1.2},:Comment ))
);
For Each Row(
If( Is Missing( :Note ) == 0,
If( :Data <= Col Mean( :Data ),
Text( Right Justified,{Row(),:Data-:Data*1.1}, :Note ),
Text( Right Justified,{Row(),:Data * 1.1}, :Note )))
);
), Grid Line Order( 2 ), Reference Line Order( 3 )}
),
Dispatch( {"Individual Measurement of Data"}, "IR Chart of IM", FrameBox( 2 ),
{Frame Size( 72,200)})))
1. 是的,您會添加什麼?
2.我確信有一種方法可以間接做到這一點。 我認為有一種方法可以查詢哪些列用於製作報告,並以這種方式捕獲列名稱。 然後將自定義腳本附加到圖表並引用數據列。
2. 如果我迭代變量列表,然後在自定義腳本中包含對當前列的引用,則會更容易。
嗨,拜倫,另一件事(實際上是 2!!),是否可以為“自定義圖形腳本 3:向數據點添加標籤”添加標籤行。是否有一種腳本方法,您不必準確命名 y 軸(例如“:Data”),但它默認為列名稱
乾杯伊恩
伊恩,
我不確定是什麼原因導致這種情況發生(還沒有足夠的咖啡),但這可以解決它。
這是自定義菜單下的腳本。
For Each Row( If( Is Missing( :Comment ) == 0, V Line( row()-1 ) ) );
For Each Row(
If( Is Missing( :Comment ) == 0,
Text( Right Justified, { row()-1, Col Maximum( :Data ) * 1.2}, :Comment )
)
);
我將 :ID 列替換為 row()-1,以使用該位置的行號,然後將其移回一位。
嗨拜倫,
我嘗試將腳本複製到 SPC 圖表生成器中
我已向您發送了該文件的鏈接並有以下評論
1_Control Chart by ID:這是您的控製圖,未更改 - 一切都很好

2_Control Chart by ID & Control Chart builder:這是從 (#1) 複製到圖表生成器中的腳本 - 垂直線在 x 軸上偏移一處,請參閱第一個兩個特殊原因
控製圖生成器

3_ID 控製圖和控製圖生成器 AS 數字/連續:如果我將 ID 從數字/序數更改為數字/連續,那麼一切都很好

4_Control Chart by ID & Control Chart builder AS 數字/連續字母/數字):但我想在 x 軸上繪製字母/數字批號,它再次關閉

這讓我抓狂,你能幫忙嗎?我將文件位置發送給你
https://1drv.ms/u/s!Au2FkmkZvSi-sA8j_g625J1VFdtw?e=0UPtz6
乾杯伊恩