按變量分類的條形圖大家好,
這聽起來像是一個簡單的問題,但我還沒有找到解決這個問題的方法。
我對多個樣本進行了測試,對於每個樣本,測試輸出構成樣本的三種不同成分的百分比。
我設置了一個包含 4 列的數據表:1 列用於樣品名稱,另外 3 列用於 3 個組分的百分比。
我正在嘗試創建一個集群條形圖,如所附圖片(在 Excel 中完成)所示,其中數據分為 3 個不同的集群,對應於 3 個組件。
我知道我可以先嘗試堆疊所有組件列(“按變量聚類”描述這裡);然而,這會使它成為一個超長的表格並且難以導航(我有多種類型的測試,每種測試都輸出不同的組件)。 此外,我需要有 2 個單獨的表,一個用於更易於導航的原始數據格式,另一個用於聚集條形圖。
我正在考慮兩種不同的方法來解決這個問題。
1) 對於每個測試,並排繪製每個組件的結果。 有沒有辦法讓它們都共享同一個 y 軸?
2)使用列堆疊方法,有沒有什麼辦法可以將兩個表合併為一個,這樣我就可以在原始表中保存一個腳本,當我點擊它時,它會自動生成聚集條形圖? 我知道我可以保存生成堆疊表的腳本,但我仍然需要重新製作聚類條形圖。
謝謝你!
回复:按變量排列的條形圖謝謝! 這就是我想知道的。 不過這沒什麼大不了的,因為正如您所說,可以訪問每個操作的腳本。
回复:按變量排列的條形圖吉姆,
感謝您引導我完成您的代碼 - 現在一切都清楚了。 快速提問 - 如果我想向新的堆疊表添加多個操作,我仍然需要在每個操作之前調用它,對吧? 比如說,如果我還想從堆疊表中繪製直方圖,我會添加下面這行嗎?
dtStack << Distribution( Continuous Distribution( Column( :Data ) ) );
回复:按變量排列的條形圖需要明確的是,沒有一種方法可以將您在 JMP 中的所有操作記錄到一個腳本中。您可以在 Excel 中以這種方式記錄宏,但不能在 JMP 中記錄。
相反,您可以通過點擊紅色小三角並選擇其中一個“保存腳本”選項來訪問您在 JMP 中運行的每個平台的 JSL。
回复:按變量排列的條形圖讓我回顧一下我為製作我在本次討論中提供給您的腳本所做的工作,以此來說明我創建腳本的方法。
- 您沒有提供數據表,所以我不得不創建自己的示例數據表。
- 由於我想向您提供我的示例數據表的副本,因此我必須決定最好是保存並上傳該表,還是只將其包含在腳本中。由於它的大小非常適中,我決定只放入腳本。
- 所以我打開了一個腳本窗口。
- 我手動輸入
Names Default to Here(1);
這通常應該是每個腳本的第一條語句。它確保此腳本中的 JSL 變量將與此腳本隔離並且不會干擾其他腳本。
- 然後我轉到我創建的數據表,單擊表面板中的紅色三角形並選擇“複製表腳本”。這將生成當前存在的表的腳本放入粘貼緩衝區。
- 然後我回到腳本窗口並將其粘貼到第一行下方的腳本中
Names Default to Here(1);<BR />
dt = New Table( "Example",
Add Rows( 5 ),
New Column( "Sample",
Character,
"Nominal",
Set Values( {"A", "B", "C", "D", "E"} )
),
New Column( "Component 1",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.828470097854734, 0.8212191631319, 0.842324016243219,
0.882067339960486, 0.872661964339204]
)
),
New Column( "Component 2",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.116772082395202, 0.140967620703167, 0.125925316195233,
0.0770373142695993, 0.113037678561007]
)
),
New Column( "Component 3",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.0547578197500645, 0.0378132161649326, 0.0317506675615479,
0.0408953457699151, 0.0143003570997886]
)
)
);
我還在表定義前面添加了 dt =,這樣就可以通過“dt”來引用這個數據表,而不是更正式地引用“數據表(“example”)”。
- 然後我開始玩,與數據表和圖形生成器交互,弄清楚我必須做什麼才能生成我想要的圖形。這是一種迭代方法,需要多次數據表操作和圖表生成器執行,直到我得到我想要的結果。
- 因此,一旦我對結果感到滿意,我就會查看生成結果所需的內容。 這是堆疊數據的簡單表操作,然後圖形構建器在堆疊數據上運行。
- 首先,我需要獲取腳本代碼。此代碼在堆疊數據表的表格面板中很容易獲得。如果右鍵單擊表格面板中“源”條目前面的綠色三角形,則可以選擇“編輯”。這將顯示可用於重新創建此數據表的 JSL。我選擇了所有代碼並複製到粘貼緩衝區中,就在腳本窗口中已經存在的 JSL 之後
Names default to here(1);
dt = New Table( "Example",
Add Rows( 5 ),
New Column( "Sample",
Character,
"Nominal",
Set Values( {"A", "B", "C", "D", "E"} )
),
New Column( "Component 1",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.828470097854734, 0.8212191631319, 0.842324016243219,
0.882067339960486, 0.872661964339204]
)
),
New Column( "Component 2",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.116772082395202, 0.140967620703167, 0.125925316195233,
0.0770373142695993, 0.113037678561007]
)
),
New Column( "Component 3",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.0547578197500645, 0.0378132161649326, 0.0317506675615479,
0.0408953457699151, 0.0143003570997886]
)
)
);
dtStack = dt << Stack(
columns( :Component 1, :Component 2, :Component 3 ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);請注意,我還添加了一個指向堆棧的指針“dtStack =”,並將對原始數據表的長引用替換為“”dt”的短引用;
- 接下來我轉到 Graph Builder 輸出並單擊紅色三角形並選擇“Save Script==>To Clipboard”
- 然後我將剪貼板(粘貼緩衝區)粘貼到腳本中。
Names default to here(1);
dt = New Table( "Example",
Add Rows( 5 ),
New Column( "Sample",
Character,
"Nominal",
Set Values( {"A", "B", "C", "D", "E"} )
),
New Column( "Component 1",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.828470097854734, 0.8212191631319, 0.842324016243219,
0.882067339960486, 0.872661964339204]
)
),
New Column( "Component 2",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.116772082395202, 0.140967620703167, 0.125925316195233,
0.0770373142695993, 0.113037678561007]
)
),
New Column( "Component 3",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.0547578197500645, 0.0378132161649326, 0.0317506675615479,
0.0408953457699151, 0.0143003570997886]
)
)
);
dtStack = dt << Stack(
columns( :Component 1, :Component 2, :Component 3 ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
dtStack << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables(
X( :Label ),
X( :Sample, Position( 1 ) ),
Y( :Data ),
Overlay( :Sample )
),
Elements( Bar( X( 1 ), X( 2 ), Y, Legend( 33 ) ) ),
SendToReport(
Dispatch(
{},
"Label",
ScaleBox,
{Label Row( 1, {Automatic Tick Marks( 0 ), Show Major Labels( 0 )} )}
),
Dispatch(
{},
"Graph Builder",
FrameBox,
{DispatchSeg( BarSeg( 1 ), Set Width Proportion( 1 ) )}
)
)
);請注意,我在 Graph Builder 語句前面添加了“dtStack <<”。這是確保 Graph Builder 將在堆疊數據而非原始代碼上運行的最佳方式。
所以這是用於創建組合腳本的過程。正如我相信您可以想像的那樣,可以將許多不同的平台添加到這樣的腳本中,它們可以使用原始數據表(“dt”)或堆疊數據表(“dtStack”)。您可能還需要添加其他數據表操作等。
關於批量複製您已保存到數據表的腳本,我不知道是否可以這樣做,但是,我自己對此沒有意見。大多數時候,我希望構建腳本,而不是自己進行數據分析。
回复:按變量排列的條形圖是的,聽起來我誤解了你的意思。
你能在“表操作腳本和平台保存腳本”位?
我剛剛發現的一件事是我實際上可以復制數據表的整個腳本。 因此,僅此一項就足以滿足我目前的需求。 我仍然需要首先將單個報告作為新腳本保存到數據表中,但現在我可以同時而不是單獨複製所有報告。
回复:按變量排列的條形圖JMP 方法是簡單地從每個圖形中獲取腳本,連同數據操作並將它們放入一個腳本中。
這聽起來有點像您在考慮將腳本保存到數據表中。那不是我的意思。我正在考慮將表操作腳本和平台保存腳本保存到新的腳本窗口。
回复:按變量排列的條形圖我明白你在說什麼,這正是我所做的 - 結合表格堆疊腳本和圖形生成器腳本。
我只是問我需要做多個操作的情況(比如,在第二個表中生成多個圖表)而不是兩個 - 是否有辦法在我執行時將所有這些操作“記錄”到一個腳本中他們。 並不是說有必要,我只是想知道 JMP 中是否存在這樣的功能。
回复:按變量排列的條形圖答案是肯定的。
我發布的 JSL 主要是由 JMP 編寫的。您運行的每個 Platform 以及您執行的每個 File==>Tables 操作都會顯示 JSL,該 JSL 將重新生成以交互方式創建的數據表或顯示。
當您通過堆疊創建新數據表時,新表的“源”條目包含將創建數據表的 JSL。
對於 Graph Builder Platform,如果您轉到紅色小三角並選擇“保存腳本”,它將提供一個腳本來重新創建圖形。
回复:按變量排列的條形圖謝謝你!
我從未在 JMP 中編寫過腳本,但我能夠將原始表中的堆棧腳本和堆疊表中的圖形生成器腳本合併為一個,只需稍加修改即可運行。 仍然需要生成一張新表,但至少我只保留一張表。
聽起來我需要開始學習在 JMP 中編寫腳本以使我的生活更輕鬆。
出於好奇,JMP 中是否有任何功能允許我將我在用戶界面上的操作“記錄”到腳本中?
回复:按變量排列的條形圖我能夠用一個簡單的 Stack 和一個 Graph Builder 重現你的圖表。

Names default to here(1);
dt = New Table( "Example",
Add Rows( 5 ),
New Column( "Sample",
Character,
"Nominal",
Set Values( {"A", "B", "C", "D", "E"} )
),
New Column( "Component 1",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.828470097854734, 0.8212191631319, 0.842324016243219,
0.882067339960486, 0.872661964339204]
)
),
New Column( "Component 2",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.116772082395202, 0.140967620703167, 0.125925316195233,
0.0770373142695993, 0.113037678561007]
)
),
New Column( "Component 3",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.0547578197500645, 0.0378132161649326, 0.0317506675615479,
0.0408953457699151, 0.0143003570997886]
)
)
);
dtStack = dt << Stack(
columns( :Component 1, :Component 2, :Component 3 ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
dtStack << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables(
X( :Label ),
X( :Sample, Position( 1 ) ),
Y( :Data ),
Overlay( :Sample )
),
Elements( Bar( X( 1 ), X( 2 ), Y, Legend( 33 ) ) ),
SendToReport(
Dispatch(
{},
"Label",
ScaleBox,
{Label Row( 1, {Automatic Tick Marks( 0 ), Show Major Labels( 0 )} )}
),
Dispatch(
{},
"Graph Builder",
FrameBox,
{DispatchSeg( BarSeg( 1 ), Set Width Proportion( 1 ) )}
)
)
);