在圖形產生器中繪製的列可以使用列名稱類別以 PAGE 分隔嗎?下面的腳本在圖形產生器中繪製了幾列(Y 軸上的多個參數),列名稱以 P 開頭。 我想同時繪製下一頁中列名以 N 開頭的其他一些列(在下面的腳本中註釋了命令)。
在下一頁中,我想繪製一些其他列,列名稱以 V 等開頭。
列類別資訊可以在單獨的資料表或任何其他形式(也許是清單)中預先定義(我對此很靈活)。 問題是這是否可以透過 JSL 實現,如果可以,如何實現?
Names Default To Here (1);
clear log ();
dt = open( "$SAMPLE_DATA\semiconductor capability.jmp" );
dt << Ungroup Columns();
Graph Builder(Size( 1469, 718 ),
Variables(X( :lot_id ), Y( :PLG2 ), Y( :PNP4 ), Y( :PNP3 ), Y( :PNP2 ), Y( :PNP1 )),
//Page(:ColumCategory)
Elements( Position( 1, 1 ), Box Plot( X, Y, Legend( 14 ) ) ),
Elements( Position( 1, 2 ), Box Plot( X, Y, Legend( 12 ) ) ),
Elements( Position( 1, 3 ), Box Plot( X, Y, Legend( 11 ) ) ),
Elements( Position( 1, 4 ), Box Plot( X, Y, Legend( 9 ) ) ),
Elements( Position( 1, 5 ), Box Plot( X, Y, Legend( 10 ) ) ),
);
自動化和腳本編寫視窗回覆:在圖形產生器中繪製的列可以使用列名稱類別透過 PAGE 分隔嗎?頁面用於基於行的分組,因此它不能用於您想要執行的操作。 您可以為每個群組提供一個列列表,然後循環該列表,同時將單獨的圖形建構器附加到具有 V 列錶框的新視窗。
回覆:可以使用列名稱類別透過 PAGE 在圖形產生器中繪製列嗎?即使重新格式化資料表也無濟於事 - 各個 Y 組顯示所有項目:

如果只是分割列子組,您可以使用數據過濾器代替頁:

Names Default To Here (1);
clear log ();
dt = open( "$SAMPLE_DATA\semiconductor capability.jmp" );
dt << Ungroup Columns();
dtstacked = dt << Stack(
columns(
:NPN1, :PNP1, :PNP2, :NPN2, :PNP3, :IVP1, :PNP4, :NPN3, :IVP2, :NPN4, :SIT1,
:INM1, :INM2, :VPM1, :VPM2, :VPM3
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
"Non-stacked columns"n( Keep( :lot_id, :wafer, :Wafer ID in lot ID, :SITE ) )
);
dtstacked << new column("first_Label", Formula( Left( :Label, 1 ) ));
dtstacked << Graph Builder(
Size( 571, 449 ),
Show Control Panel( 0 ),
Fit to Window,
Variables(
X( :lot_id ),
Y( :Data ),
Page( :first_Label ),
Group Y( :Label ),
Color( :Label )
),
Elements( Box Plot( X, Y, Legend( 16 ) ) ),
Local Data Filter(
Add Filter(
columns( :first_Label ),
Where( :first_Label == "N" ),
Display( :first_Label, N Items( 5 ) )
)
)
)回覆:可以使用列名稱類別透過 PAGE 在圖形產生器中繪製列嗎?@hogi @jthi好的。 謝謝。 另一種想法是放置/發送第一個圖形生成器窗口,其中繪製了一組列到日誌窗口,下一組新列繪製在第一個列下,依此類推,然後關閉打開的圖形窗口和關聯的數據表。 如何透過 JSL 執行此操作?
回覆:在圖形產生器中繪製的列可以使用列名稱類別透過 PAGE 分隔嗎?建立包含您感興趣的列的列表列表,並在建立圖形產生器並將其附加到日誌/ v 列錶框中時循環遍歷該列表。 所有列的大小是否相同,或者 Y 軸的數量是否有變化?
回覆:可以使用列名稱類別透過 PAGE 在圖形產生器中繪製列嗎?這是一種選擇,但這不是您可以使用的唯一選擇
Names Default To Here(1);
create_graph = Function({dt, ycollist}, {Default Local},
vlb = V List Box(
gb = dt << Graph Builder(Variables(X(:lot_id)))
);
For Each({colname, idx}, ycollist,
gb << Add Variable({Eval(colname), Role("Y")});
gb << Add Element(1, idx, {Type("Box Plot"), X, Y}); // define boxplots
gb << Remove Element(1, idx, 1); // remove points
);
return(vlb);
);
my_groups = {{"PNP1", "PNP2", "PNP3"}, {"NPN3", "NPN2", "NPN1", "NPN4"}};
dt = Open("$SAMPLE_DATA\semiconductor capability.jmp");
// could also just create journal and add new_vlb to that
nw = New Window("Collector",
vlb = V List Box()
);
For Each({my_group}, my_groups,
new_vlb = create_graph(dt, my_group);
vlb << Append(new_vlb);
);
nw << journal;
nw << Close Window;
my_j = Current Journal();
Write();回覆:可以使用列名稱類別透過 PAGE 在圖形產生器中繪製列嗎?如果每個案例/群組有不同的列,則需要新增 JSL 來變更每次變更的「my_group」值。
您可能可以透過在目前 For Each( {my_group) 之外新增額外的 For Each() 來實現此目的,在返回目前 For Each() 之前,您可以在其中變更 my_group 的值。
我建議您嘗試一下,如果您遇到更多問題,請帶著更多問題回到社區。
回覆:可以使用列名稱類別透過 PAGE 在圖形產生器中繪製列嗎?@jthi對於每個案例/組,y 軸上繪製的列數會有所不同。
回覆:在圖形產生器中繪製的列可以使用列名稱類別透過 PAGE 分隔嗎?@jthi @tx尼爾森謝謝。
我的繪圖參數按表格分組。 目的是在日誌中將每個組附加在其他組的下面。 另外,我希望群組條目成為每個條目的圖表標題。這種情況下該如何修改上面的JSL呢?

回覆:可以使用列名稱類別透過 PAGE 在圖形產生器中繪製列嗎?在您的情況下,我將使用關聯數組,其中鍵是組名稱,值是參數列表(列)。 然後在建立日誌時使用 For Each 循環此關聯數組
回覆:在圖形產生器中繪製的列可以使用列名稱類別透過 PAGE 分隔嗎?@tx尼爾森@hogi 。 感謝您的建議。 短暫休息後我又回到這個話題。
@jthi在我的 JMP 16.2 中運行腳本的這一部分
Names Default To Here(1);
create_graph = Function({dt, ycollist}, {Default Local},
vlb = V List Box(
gb = dt << Graph Builder(Variables(X(:lot_id)))
);
For Each({colname, idx}, ycollist,
gb << Add Variable({Eval(colname), Role("Y")});
gb << Add Element(1, idx, {Type("Box Plot"), X, Y}); // define boxplots
gb << Remove Element(1, idx, 1); // remove points
);
return(vlb);
);
my_groups = {{"PNP1", "PNP2", "PNP3"}, {"NPN3", "NPN2", "NPN1", "NPN4"}};
dt = Open("$SAMPLE_DATA\semiconductor capability.jmp");
// could also just create journal and add new_vlb to that
nw = New Window("Collector",
vlb = V List Box()
);
For Each({my_group}, my_groups,
new_vlb = create_graph(dt, my_group);
vlb << Append(new_vlb);
);給出

IE
{"PNP1", "PNP2", "PNP3"} 和
{"NPN3", "NPN2", "NPN1", "NPN4"}沒有像我的第一篇文章中提到的那樣繪製在 y 軸上(即一個在另一個上方,且規格限制參考線可見),也沒有繪製在兩個單獨的圖表上。
如上所述,我的繪圖參數會按以下單獨的表格分組
Names Default To Here( 1 );
dtg = New Table( "Parameter Groups",
Add Rows( 11 ),
New Column( "Parameter", Character, Nominal,
Set Values( {"PNP1", "PNP2", "NPN2", "NPN3", "INV2", "NPN1", "PNP3", "NPN4", "INV3", "PNP6", "INV4"} ) ),
New Column( "Group", Character, Nominal, Set Values( {"DC", "DC", "AC","AC","RF","AC","DC","AC", "RF", "DC", "RF"} ) )
);我希望每個圖表中的參數按上表的「組」列中的條目進行分組。
例如,頂部圖有一個圖塊直流和“PNP1”、“PNP2”、“PNP3”和“PNP6”繪製在 y 軸上,其下方是帶有標題的下一個圖表交流電和“NPN2”、“NPN3”、“NPN1”和“NPN4”繪製,最後第三個圖表在底部有標題“射頻”和“INV2”和“INV4 ” 繪製在 y 軸上。
我能否獲得有關關聯數組方法的一些幫助以繼續? 這樣我就可以獲得獨特的團體,但是如何獲得關聯的參數(使用 Get RowsWhere()) ?
gg = Associative Array (dt:Group);
gg << get keys;
( @jthi ,除了日記之外,我更喜歡您的“收集器”視窗選項,因為它根據我想查看的內容為我們提供了更大的靈活性)
回覆:在圖形產生器中繪製的列可以使用列名稱類別透過 PAGE 分隔嗎?使用 JMP 16,我能夠重現您所看到的問題。我未能使用“添加變數”等來獲得您想要的結果。但是,透過使用在字串變數中建立 Graph Builder JSL 然後執行的技術,我能夠獲得箱線圖

Names Default To Here( 1 );
create_graph = Function( {dt, ycollist},
{Default Local},
theExpr =
"vlb = V List Box(
gb = dt << Graph Builder(Size( 1469, 718 ),Variables(X(:lot_id)";
For Each( {colname, idx}, ycollist,
theExpr = theExpr || ",Y(:\!"" || colname || "\!"n)"
);
theExpr = theExpr || ")";
For Each( {colname, idx}, ycollist,
theExpr = theExpr || ",Elements( Position( 1," || Char( idx ) ||
" ), Box Plot( X, Y) ) "
);
theExpr = theExpr || ");";
Eval( Parse( theExpr ) );
Return( vlb );
);
my_groups = {{"PNP1", "PNP2", "PNP3"}, {"NPN3", "NPN2", "NPN1", "NPN4"}};
dt = Open( "$SAMPLE_DATA\semiconductor capability.jmp" );
// could also just create journal and add new_vlb to that
nw = New Window( "Collector", vlb = V List Box() );
For Each( {my_group}, my_groups,
new_vlb = create_graph( dt, my_group );
vlb << Append( new_vlb );
);回覆:在圖形產生器中繪製的列可以使用列名稱類別透過 PAGE 分隔嗎?@tx尼爾森這在 16.2 中有效(JMP 抱怨語法錯誤,但仍然繪製圖表)。
如果我有另一個清單
paraGroupList = {"DC", "AC"};我該如何分配直流作為圖表標題(目前PNP1 和 2 更多與 lot_id )繪圖時(上圖)
{"PNP1", "PNP2", "PNP3"}和交流電作為圖表標題(目前NPN3 及 3 個以上與 lot_id )用於繪製時(下圖)?
{"NPN3", "NPN2", "NPN1", "NPN4"}回覆:在圖形產生器中繪製的列可以使用列名稱類別透過 PAGE 分隔嗎?運行圖表。
點擊標題並更改它。
然後轉到紅色小三角形並選擇儲存腳本。
查看腳本,您將看到 JSL 以及它如何更改標題。
將其採用到您的腳本中。
我強烈建議您花時間閱讀腳本指南。它將加速您 JSL 的學習
回覆:在圖形產生器中繪製的列可以使用列名稱類別透過 PAGE 分隔嗎?@tx尼爾森謝謝,我知道如何做圖表標題了。
如何突破創建圖函數如果ycollist是空的?
回覆:可以使用列名稱類別透過 PAGE 在圖形產生器中繪製列嗎?使用 Length() 函數檢查清單是否有條目,然後繞過程式碼;
回覆:在圖形產生器中繪製的列可以使用列名稱類別透過 PAGE 分隔嗎?@tx尼爾森謝謝。看來我不能使用休息 ()在我的繪圖函數中(如果它在 for 循環中使用)。 我會看看我有什麼選擇。
回覆:可以使用列名稱類別透過 PAGE 在圖形產生器中繪製列嗎?只需進行所需的評估,如果不滿足,則繞過程式碼。請見下文:
Names Default To Here( 1 );
create_graph = Function( {dt, ycollist},
{Default Local},
theExpr =
"vlb = V List Box(
gb = dt << Graph Builder(Size( 1469, 718 ),Variables(X(:lot_id)";
For Each( {colname, idx}, ycollist,
If( Length( colname ) != 0,
theExpr = theExpr || ",Y(:\!"" || colname || "\!"n)"
);
theExpr = theExpr || ")";
For Each( {colname, idx}, ycollist,
theExpr = theExpr || ",Elements( Position( 1," || Char( idx ) ||
" ), Box Plot( X, Y) ) "
);
theExpr = theExpr || ");";
Eval( Parse( theExpr ) );
);
Return( vlb );
);
my_groups = {{"PNP1", "PNP2", "PNP3"}, {"NPN3", "NPN2", "NPN1", "NPN4"}};
dt = Open( "$SAMPLE_DATA\semiconductor capability.jmp" );
// could also just create journal and add new_vlb to that
nw = New Window( "Collector", vlb = V List Box() );
For Each( {my_group}, my_groups,
new_vlb = create_graph( dt, my_group );
vlb << Append( new_vlb );
);回覆:在圖形產生器中繪製的列可以使用列名稱類別透過 PAGE 分隔嗎?@tx尼爾森謝謝。 運行腳本會出現錯誤(在 JMP 16.2 上),但我無法消除這些錯誤。

回覆:在圖形產生器中繪製的列可以使用列名稱類別透過 PAGE 分隔嗎?抱歉,我急於回覆之前的答案。如果 my_group 為空,下面的 JSL 將繞過圖形的創建
Names Default To Here( 1 );
create_graph = Function( {dt, ycollist},
{Default Local},
theExpr =
"vlb = V List Box(
gb = dt << Graph Builder(Size( 1469, 718 ),Variables(X(:lot_id)";
For Each( {colname, idx}, ycollist,
theExpr = theExpr || ",Y(:\!"" || colname || "\!"n)"
);
theExpr = theExpr || ")";
For Each( {colname, idx}, ycollist,
theExpr = theExpr || ",Elements( Position( 1," || Char( idx ) ||
" ), Box Plot( X, Y) ) "
);
theExpr = theExpr || ");";
Eval( Parse( theExpr ) );
Return( vlb );
);
my_groups = {{"PNP1", "PNP2", "PNP3"}, {"NPN3", "NPN2", "NPN1", "NPN4"}};
dt = Open( "$SAMPLE_DATA\semiconductor capability.jmp" );
// could also just create journal and add new_vlb to that
nw = New Window( "Collector", vlb = V List Box() );
For Each( {my_group}, my_groups,
If( Length( my_group ) != 0,
new_vlb = create_graph( dt, my_group );
vlb << Append( new_vlb );
vlb = V List Box();
)
);