當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?我的資料表在第 1 列中有part_ID 條目。 在第 2 列中,顯示 5 個總和參數 - 最小值、Q1、中位數 Q3、最大值以及測試限值 LSL、USL。 在第 1 列中,部件 ID 重複 7 次(對應於 5 個總計參數 + LSL 和 USL,總共 7 次),之後出現下一個部件 ID(以及第 2 列中對應的 7 個數字)。
我不想改變資料表的格式(即不想轉置)。
我想使用 5 個匯總參數和限制來建立箱線圖趨勢圖(X 軸上帶有零件 ID)。 如何透過 JSL 執行此操作?
自動化和腳本編寫視窗回覆:當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?是否有某些特定原因不將資料格式變更為更好的格式?
從

更容易管理的事情

如果您沒有任何指示哪一行是哪一行,您確定它們始終處於相同的順序嗎?
回覆:當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?@jthi謝謝。 我的原始資料採用底表的形式,但另外還有測量參數名稱作為附加列。 在這種形式中,我知道如何使用 7 個參數繪製箱線圖。
我使用 JMP Summary () 函數以頂部表格的形式取得資料。
我需要此表單以我想要的格式繪製其他圖表,其中測量的參數資料(例如頂部表中的第 3 列)在一列中。 同一零件有多個具有不同範圍的測量參數(出現在單獨的列中),我將其繪製在 Y 軸上,並且僅在列中包含不同測量參數的數據允許我在其中獲得不同的 Y 軸刻度JMP(X 軸上帶有零件ID)。 不同的測量參數是相關的,這樣的圖有助於理解相對趨勢。
希望上面解釋了為什麼我的數據採用您的頂級表格的格式。
回覆:當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?這篇文章可能會提供一些想法根據已匯總的值建立箱線圖。
回覆:當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?@jthi 。 謝謝。 我看過你連結中的食譜。 所描述的方法似乎僅在資料是第二個表格的格式時才有效,這不是我想要的。
如果可以告訴JMP 使用給定零件ID(附件中的第1 列)的相鄰列(附加範例資料集中的標籤)中給出的最小值、Q1、中位數、Q3、最大值來建立箱線圖,而不是JMP 計算這些值本身來自每個部分的值的分佈,我想我會得到我想要的。這可以透過 JSL 實現嗎?
回覆:當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?您可以嘗試使用 Rect() 和 Line() 建立箱線圖(也有箱線圖 seg 可能有效,但您需要模擬資料或使用頻率)。
回覆:當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?@jthi謝謝,我想,箱型圖段可以用來做我想做的事。
從腳本索引範例中,我不清楚如何為每個零件 ID(在 x 軸上)產生箱形圖,如我的範例資料(之前附有)
我需要循環遍歷零件 ID 嗎? 那麼這種情況下,該如何確定畫幅的大小、比例呢?
如果我可以使用我的範例資料來獲得基本範例,那將會很有用。

回覆:當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?箱形圖 seg 可能只能用於為單一框架框建立單一箱形圖,並且它將位於中心
回覆:當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?@jthi謝謝。
回覆:當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?如果您被迫使用現有的資料格式,您仍然可以在表格中新增列。 您可以為每個統計資料建立一列,以遵循前面連結中的選項一,或新增兩列(值 + 頻率),然後遵循第二個選項。 或使用圖形腳本從不同部分建立完全自訂的
回覆:當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?@jthi 。 以頂部表格(以及所附的我的表格)格式提供資料的全部原因只是為了讓我可以透過 Y 圖在一組中具有不同的比例。
https://community.jmp.com/t5/Discussions/Can-you-change-y-axis-scale-independently-from-other-y-axis/td-p/17649
我不想給你“頁面”選項,所以我去了並跟隨@tx尼爾森建議將相關數據以他建議的形式放入單獨的列中(假設我正確理解了他的建議)。
如果有任何其他方式不使用頁面或@tx尼爾森的建議(另一個類似的這裡), 洗耳恭聽 :)。
回覆:當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?@jthi感謝您對此主題的建議,我將返回該主題,因為我必須保持資料格式與先前附加在該線程中的範例資料相同。 我可以透過下面的腳本獲得幾乎我需要的東西(可能有更好的方法來做到這一點,但下面是我的故事)。 我需要幫助解決兩件事。
- 我需要為每個partID(目前未在本機資料篩選器中選擇,下左圖)繪製一條連接Min和Max的垂直黑線。 當在本地資料過濾器中選擇“最小值”/“最大值”時(下右圖),它們通過垂直黑線(代替現在右圖上的黑點)連接,我將了解箱線圖的基本結構,其中我認為已經足夠並且符合目的。 如何透過 JSL 為每個零件 ID 取得這條垂直線(V Line ()?)?
- 其次,實際數據中我測量的參數(範例數據中的電流、電阻)將>40。 因此,我不想按照我在腳本中所做的方式進行圖例顏色設定。 如何將圖例顏色預設為黑色(否則 JMP 為每個 Y 群組設定不同的顏色,而不是我設定標記顏色的方式)。
Names Default To Here (1);
clear log ();
dt = Current Data Table ();<BR />
//Set LSL/USL marker and color
dt << Row Selection(
Select where( Contains( :Label, "LSL" ) | Contains( :Label, "USL" ) ),
Match case( 1 ),
Dialog( Edit( Contains( Source Column( :Label ) ) ) )
) << Markers( 29 ) << Colors( "Red" );
dt << Clear Select;<BR />
// Set Q1/Q3 marker and color
dt << Row Selection(
Select where( Contains( :Label, "Q1" ) | Contains( :Label, "Q3" ) ),
Match case( 1 ),
Dialog( Edit( Contains( Source Column( :Label ) ) ) )
) << Markers( 29 ) << Colors( "Black" );
dt << Clear Select;<BR />
//Set Median arker and color
dt << Row Selection(
Select where( Contains( :Label, "Median" ) ),Match case( 1 ),
Dialog( Edit( Contains( Source Column( :Label ) ) ) )
) << Markers( 0) << Colors( "Blue" );
dt << Clear Select;<BR />
// Plot chart
gb = Graph Builder(
Size( 404, 412),<BR /> Show Control Panel( 0 ),
Variables( X( :partID ), Y( :Resistance ), Y( :Current ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 37 ), Jitter( "None" ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 35 ), Jitter( "None" ) ) ),
Local Data Filter(
Add Filter(
columns( :Label ),
Where( :Label == {"LSL", "Median", "Q1", "Q3", "USL"} )
)
),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
37,
Properties( 0, {Line Color( 0 )}, Item ID( "Resistance", 1 ) )
), Legend Model(
35,
Properties( 0, {Line Color( 0 )}, Item ID( "Current", 1 ) )
)}
)
)
);

回覆:當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?加入上面的這個附加腳本給出了使用 V Line () 所需的內容。
僅以 PartID =1 為例(見下圖)。 如何使其自動循環?
gbr = gb << report;
// For FrameBox (1)
Q1_Part1_Para1 = 2.75;
Q3_Part1_Para1 = 3.1;
// For FrameBox (2)
Q1_Part2_Para1 = 250;
Q3_Part2_Para1 = 302;
PartNo = 1;
Eval(EvalExpr(gbr [Framebox (1)]<< Add graphics Script (
Pen color (black); V Line (PartNo-1, Q1_Part1_Para1, Q3_Part1_Para1);
)));
Eval(EvalExpr(gbr [Framebox (2)]<< Add graphics Script (
Pen color (black); V Line (PartNo-1, Q1_Part2_Para1, Q3_Part2_Para1);
)));
回覆:當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?您可以使用 Summarize() 來取得唯一的partID 值。 然後,您可以使用資料表下標與 Loc() 組合來在循環時取得特定 partID 的行。 然後計算/獲取您的值並添加您的行
回覆:當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?@jthi
>>您可以使用 Summarize() 來取得唯一的partID 值。
好的
>>然後您可以使用資料表下標與 Loc() 組合來在循環時取得特定partID 的行。
沒用過Loc()。 這是否為我提供了每個partID 的X 座標。 帶有我的範例資料的範例將非常有用。
>>然後計算/獲取您的值並添加您的行。
您的意思是,計算每個部分的 X 座標,因為其他數字 Min、Max、Q1、Q3 和 Median 已經計算出來。
另外,我是否需要循環遍歷每個 FrameBox 還是有更直接的替代方案?
回覆:當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?您的partID在圖表中的順序與表格(和總和)中的順序相同,因此您已經有了x座標。 如果您已經計算出所需的所有值,則只需從資料表中檢索它們即可。 以下是使用 Summarize、Loc 和資料表下標的範例
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Summarize(dt, uniq_vals = by(:age)); // Summarize returns characters
For Each({uniq_val}, uniq_vals,
val_rows = Loc(dt[0, "age"], Num(uniq_val));
show(val_rows);
f_rows = val_rows[Loc(dt[val_rows, "sex"], "F")];
show(f_rows);
f_heights = dt[f_rows, "height"];
show(f_heights);
);
您只有兩個框架框,但您希望在其中添加多行,因此不需要循環框架框(循環partIds)
編輯:
另外,您可以使用 << Get RowsWhere 代替 Loc,因為它通常更容易使用
回覆:當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?@jthi 。 好的。 謝謝。 我會嘗試一下(如果我遇到困難會回來)。
在我的實際資料集中,測量參數的數量> 50(可能更多),因此如果我將所有 50 個參數趨勢圖繪製在彼此之上,將有 50 個 FrameBox,因此我的問題是循環 FrameBox。
另外,對於我的 PartID = 1,我建議使用 X= 0,作為上面腳本中 V Line () 中的 X 座標。 這是應該的樣子嗎(即 V 線的 x 座標從 0 開始,而不是從 1 開始,即使它顯示為 1)?
回覆:當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?如果有那麼多參數,那麼有額外的循環是個好主意。
對於 X = 0 的事情,我建議嘗試一下。 看看會發生什麼事(這樣你通常會學到最多)。 從X軸設定也可以看到,值為0,標籤為1

回覆:當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?@jthi好的。 謝謝。 還有一件事困擾著我。 我已關閉腳本中的抖動,但頂部 (Q3) 和底部 (Q1) 標記仍然顯示偏移。 您可以使用先前附加的資料表來執行我的腳本來測試這一點(我使用的是 JMP 16.2)。
是否還有其他抖動設定需要關閉。
如果我使用以下內容為 Q1 和 Q3 設定標記(只是在繪製垂直線之前嘗試獲取框形狀),則抖動/偏移會更加明顯,但即使使用水平標記,我也會看到一些偏移。 我錯過了什麼嗎?
// Q1/Q3 marker and color
dt << Row Selection(Select where(Contains( :Label, "Q3" ) ),Match case( 1 ),Dialog( Edit( Contains( Source Column( :Label ) ) ) )
) << Markers( "Π" ) << Colors( "Black" );
dt << Clear Select;
dt << Row Selection(Select where( Contains( :Label, "Q1" ) ), Match case( 1 ), Dialog( Edit( Contains( Source Column( :Label ) ) ) )
) << Markers( "Џ" ) << Colors( "Black" );
dt << Clear Select;
更正:偏移似乎是由於 JMP 渲染圖表造成的。 水平拉伸圖表可以修復偏移量。
回覆:當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?以此方式檢查
frame = (gbr)[FrameBox( 1 )];
seg = (frame << FindSeg( Marker Seg( 1 ) ));
{method, axis, limit, spacing, seed} = seg << Get Jitter();即使將抖動設為無,我也確實獲得了“種子”值
{"None", "XY", 1, 0, 184430754}我的觀點是否不穩定(看起來確實如此)?
回覆:當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?您的抖動設定為“無”

我想這意味著不應該添加隨機噪聲

回覆:當 5 個總計參數(最小值、Q1、中位數 Q3、最大值)和限值(LSL、USL)位於與給定的 part_ID 對應的欄位中時,如何建立箱線圖?由早期腳本(在此線程中)調用的這個附加腳本可以滿足我的需求。 腳本特定於我的數據,但顯示了一種在不同框架盒的循環內繪製 V Line () 的方法。
在 Graphbuilder 上變更為 BoxPlots,並在本機資料過濾器中選擇 Q1、Q2 和中位數,即可獲得正確的箱型圖。 V 線 () 連接最大值和最小值,完成箱線圖的解剖。由於僅選擇 Q1、Q2,而忽略其餘數據,我認為會得到正確的框(在本地數據過濾器中選擇更多參數,例如 Min 和 Max 會給出錯誤的框)。
Names Default To Here (1);
Clear Log ();
setVLines_atMinMax = Function ( {gbr, FrameboxNo, PartNo, Min, Max}, {},
Eval(EvalExpr(gbr [Framebox (FrameboxNo)]<< Add graphics Script (
V Line (Expr(PartNo-1), Expr(Min), Expr(Max));
)));
);
gbr = gb << report;
nParts =5;
nc = ncols (dt); //number of coulms in my data table
For (j =1, j <=(nc-1), j++,
FrameboxNo = j;
for ( i = 1, i <= nParts, i++,
ind = (7*i-3); //show (ind);
ind_next = (7*i -3) + 1; //show (ind_next);
PartNo = Num(:PartID[ind]); //show (PartNo);
Min = Column(nc) [ind]; show (Min);
Max = Column(nc) [ind_next]; show (Max);
setVLines_atMinMax (gbr, FrameboxNo, PartNo, Min, Max);
);
nc = nc-1;
);
//show (FrameboxNo); show (nc);
