圖形產生器:隱藏 X 個沒有資料的類別大家好,
我有一個帶有分組列和幾個回應變數的表。
New Table( "Test",
Add Rows( 7 ),
New Column( "GROUP",
Character,
"Nominal",
Set Values( {"a", "b", "c", "d", "e", "f", "g"} )
),
New Column( "Y",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [7, ., 6, ., 4, ., 2] )
),
New Column( "Y 2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [7, 6, 2, 3, ., ., .] ),
Set Display Width( 49 )
)
)我想建立一個帶有列切換器的條形圖。
Graph Builder(
Size( 527, 448 ),
Show Control Panel( 0 ),
Variables(
X( :GROUP, Order By( :Y, Ascending, Order Statistic( "Mean" ) ) ),
Y( :Y )
),
Elements( Bar( X, Y, Legend( 4 ) ) ),
Column Switcher( :Y, {:Y, :Y 2} )
)我的問題是我不想顯示沒有數據的等級。 換句話說,我不想看到 Y 的等級「b」、「d」和「f」以及 Y2 的等級「e」、「f」、「g」。

我嘗試使用“where”子句,但不幸的是列切換器沒有考慮它。
您知道我們如何做到這一點嗎?
先致謝!
回覆:圖形產生器:隱藏沒有資料的 X 類別你好@geoffrey_mann ,
感謝您的參與和額外資訊。
我將開始向我的同事宣傳該功能以獲得選票! 
關於腳本,我希望不影響當前表,所以我認為本地資料過濾器是一個不錯的選擇! 我將更深入地探討這種可能性。
回覆:圖形產生器:隱藏沒有資料的 X 類別你好@anne_sa
我很高興這有幫助。 這是我想做的事情有一段時間了,你給了我動力。 
另外,我同意你的觀點,並且@vince_faller偵聽器或圍繞列切換器自訂行為的方法通常對於編寫自己的外掛程式或更改行為的人很有用。 我們在 JMP Clinical 和 JMP Genomics 中一直這樣做,這就是為什麼我將功勞歸功於@kelci_miclaus和@drewfoglia對於我借用的程式碼。
如果我們認識一位 JMP 產品經理可以幫助實現這一目標就好了。
請你們倆投票支持該功能,這將有助於證明其合理性。
至於最終的更改,您應該可以控制您編寫的包裝器程式碼。 API 呼叫只是為了取代 X 和 Y 變數。 我將繼續添加這些函數來幫助程式設計師簡化 GraphBuilder 的包裝,以便他們可以更快地建立外掛程式。 我在這裡想說的只是添加函數來更新 API 檔案中的 GraphBuilder,以便您使用的任何“驅動程式”檔案都具有選擇行為。 請注意,我可以將 dt <
請注意驅動程式檔案中的clearrowstates:
dt << clearrowstates();
newvarname = lb<<GETSELECTED></GETSELECTED>
根據我對您想要執行的操作的「簡化」理解,我建議您只需替換 dt << clearrowstates();與 dt <<取消排除();請告訴我這是否是您喜歡的行為或比這更複雜。
回覆:圖形產生器:隱藏沒有資料的 X 類別我完全同意你的看法@vince_faller ,這將會是一個非常好的功能:)
我想我會把它加到 JMP 願望清單中!
回覆:圖形產生器:隱藏沒有資料的 X 類別非常感謝您提供這些腳本@geoffrey_mann
絕對比我做的乾淨!
我只想調整一件事:每次我們在列錶框中選擇一個新變數時,行狀態都會重設。 因此,如果某些點已被標記/排除/著色...我們將丟失此訊息,這可能會很煩人。
否則它符合我的期望,所以再次感謝!
回覆:圖形產生器:隱藏沒有資料的 X 類別如果列開關有一個 <回覆:圖形產生器:隱藏沒有資料的 X 類別
你好,我們又見面了@anne_sa ,
抱歉耽擱了,我實際上感染了流感幾天,有點落後了。
我附上了兩份文件。 第一個 jsl 文件(更改行狀態的範例腳本.jsl)是驅動程式文件,第二行中的路徑是放置第二個文件 (GraphBuilderJSLAPI.jsl) 的位置的完整路徑。
//Include script to modify GraphBuilder with some special functions defined
include(ConvertFilePath("/Users/gemann/Projects/Prototypes/JSLClasses/GraphBuilderJSLAPI.jsl", absolute, windows));
//Create a sample table
dt = New Table( "Test",
Add Rows( 7 ),
New Column( "GROUP",
Character,
"Nominal",
Set Values( {"a", "b", "c", "d", "e", "f", "g"} )
),
New Column( "Y",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [7, ., 6, ., 4, ., 2] )
),
New Column( "Y 2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [7, 6, 2, 3, ., ., .] ),
Set Display Width( 49 )
)
);
//Add a new window and build a listbox beside a graphbuilder
New Window( "CustomColumnSwitcher Window",
//Start by getting all of the columns in the current datatable
CNames = dt << Get Column Names( Numeric );
Show( CNames );
//User a horizontal layout
HListBox(
//Use a ListBox as the new Column Switcher
lb = List Box(
CNames,
maxSelected(1),
//The next lines specify the script that gets run when an item in listbox is selected
dt << clearrowstates();
newvarname = lb<<GETSELECTED></GETSELECTED>
祝您好運,如果您有任何問題請告訴我。 當然這些文件還沒有經過充分測試! 
回覆:圖形產生器:隱藏沒有資料的 X 類別你好@geoffrey_mann ,
我寫了一些東西來基本上更新列切換器並更改軸設定(如建議的@朱利安)每次我們選擇一個新變數。 然而,它可能不是很有效,所以我當然對你的解決方案非常感興趣!
回覆:圖形產生器:隱藏沒有資料的 X 類別嗨安妮,
我想再次與您聯繫,看看您是否找到了解決問題的編碼解決方案。 我花了一段時間才找到時間,但如果您仍然需要的話,我有一個編碼解決方案。
回覆:圖形產生器:隱藏沒有資料的 X 類別你好@朱利安!
我非常感謝您為解決我的問題所做的努力! 不幸的是,一個反應變數與下一個反應變數的非缺失水準的數量可能不同。 但是,您的上一篇文章絕對可以用於「編碼解決方案」。 根據等級編號更改軸設定確實是顯示預期內容的好方法。 我會朝這個方向努力。 感謝您的幫忙!
回覆:圖形產生器:隱藏沒有資料的 X 類別你好@anne_sa ,
我明白你的意思。 這確實可能歸結為編寫一些自訂的程式碼,但讓我對此進行更多的互動式嘗試。 每個 Y 的組別是否始終只有四個等級(儘管等級不同)? 如果是這樣,這裡有一個潛在的駭客:圖形產生器將在列切換時維護X 軸,並且由於您的等級按升序排列(因此空白等級始終位於末端),我們可以調整軸,以便僅顯示四個級別。 您可以在軸設定中執行此操作(右鍵單擊軸 > 軸設定),或者只需拖出軸的末端直到隱藏缺少的等級)。
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :GROUP, Order By( :Y, Ascending, Order Statistic( "Mean" ) ) ), Y( :Y ) ),
Elements( Bar( X, Y, Legend( 4 ) ) ),
Column Switcher( :Y, {:Y, :Y 2} ),
SendToReport( Dispatch( {}, "GROUP", ScaleBox, {Min( -0.5 ), Max( 3.5 ), Inc( 1 ), Minor Ticks( 0 )} ) )
);

也許是您的情況的潛在解決方案?
@朱利安
回覆:圖形產生器:隱藏沒有資料的 X 類別謝謝@朱利安對於這個建議! 事實上,它允許僅顯示帶有資料的等級。
唯一的問題(但也許我問太多)是我們失去了行之間的連結。 例如,如果我為 Y 選擇級別“a”,並且想要查看 Y2 的相應值,則當我使用本地資料過濾器選擇 Y2 時,不會突出顯示任何內容。
也許編碼預期的行為是解決方案...
回覆:圖形產生器:隱藏沒有資料的 X 類別你好@anne_sa ,
正如您所發現的,圖形生成器會觀察分組變數的這些類別,並且確實會堅持繪製它們(這通常是一件好事),因為它假設您發現它們的價值,因為您將它們保存在表中。 在使用列切換器的情況下,它並不像刪除這些行那麼簡單,因為其他列資料確實存在。 一種解決方案是重組數據,以便消除那些遺失的行。 我會透過堆疊來做到這一點:
表 > 堆疊
Data Table( "Test" ) << Stack(
columns( :Y, :Y 2 ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
這將返回如下表:

透過右鍵單擊任何缺少的儲存格 > 選擇匹配來刪除缺失值。 然後,刪除這些行。 這將返回附表。 現在,製作圖表,但使用本地資料過濾器而不是列切換器來選擇先前來自標籤列的回應:
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :GROUP ), Y( :Data ) ),
Elements( Bar( X, Y, Legend( 4 ) ) ),
Local Data Filter(
Add Filter(
columns( :Label ),
Where( :Label == "Y" ),
Display( :Label, Size( 160, 17 ) )
)
)
);

由於沒有遺失行,圖形產生器僅顯示填滿了資料的群組層級。當然,您可以將其推廣到任意數量的 Y 級別——只需在初始步驟中將所有級別堆疊起來即可。
我希望這有幫助!
@朱利安
回覆:圖形產生器:隱藏沒有資料的 X 類別嗨安妮,
我現在看到了你的問題,並且還在考慮它。 我相信這需要一點編碼。回覆:圖形產生器:隱藏沒有資料的 X 類別感謝您的回答@geoffrey_mann
不幸的是,這並不正是我想要得到的,因為當我使用列切換器選擇新列時,本地資料過濾器仍然基於 Y。
當然,可以手動更改本地資料過濾器,但由於我可以擁有相當多的變量,因此如果有一種自動方法來執行此操作會很棒:)
回覆:圖形產生器:隱藏沒有資料的 X 類別嗨安妮,
您認為需要“where”子句或更確切地說某種過濾器的想法是正確的。 嘗試將以下行新增至您的 graphbuilder 腳本:
Local Data Filter( Add Filter( columns( :Y ), Where( :Y >= 2 & :Y <= 7 ) ) )
我希望本地資料過濾器可以嗎?
Graph Builder(
Size( 527, 448 ),
Show Control Panel( 0 ),
Variables(
X( :GROUP, Order By( :Y, Ascending, Order Statistic( "Mean" ) ) ),
Y( :Y )
),
Elements( Bar( X, Y, Legend( 4 ) ) ),
Column Switcher( :Y, {:Y, :Y 2} ),
Local Data Filter( Add Filter( columns( :Y ), Where( :Y >= 2 & :Y <= 7 ) ) )
);
回覆:圖表建構器:隱藏沒有資料的 X 個類別雖然貼文比較老了,但或許還是能提供一些幫助:
您也可以使用本機資料篩選器,選擇缺失值和對應 Y 的反向值。
Local Data Filter(
Inverse( 1 ),
Add Filter( columns( :Y1, :Y2 ), Select Missing( :Y2 ) )
),
Column Switcher( :Y2, {:Y1, :Y2, :Y3} )
此外,您還可以新增事件,用於在選擇列切換器的另一個層級時觸發,該事件會變更所有您感興趣的 Y 變數的本機資料切換器篩選器設定。這可能有點過度設計,但或許可行。
回覆:圖表建構器:隱藏沒有資料的 X 個類別嗨@martindemel ,
謝謝你的留言。雖然這是一篇比較老的帖子,但能發現實現相同目標的不同方法總是令人欣喜的。