グラフ ビルダー: データのない 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」句を使用しようとしましたが、残念ながら列スイッチャーでは考慮されません。
どうすればそれができるか考えられますか?
前もって感謝します!
Re: グラフ ビルダー: データのない X カテゴリを非表示にするこんにちは@geoffrey_mann 、
ご参加と追加情報をありがとうございました。
投票を得るために同僚にこの機能を宣伝し始めます。 
スクリプトに関しては、現在のテーブルに影響を与えたくないので、ローカル データ フィルターが良い選択肢だと思います。 この可能性をさらに深く探っていきます。
Re: グラフ ビルダー: データのない X カテゴリを非表示にするこんにちは@anne_sa
お役に立ててとてもうれしいです。 それは私がしばらくやりたかったことであり、あなたは私にやる気を与えてくれました。 
また、私もあなたに同意し、 @vince_fallerリスナーまたは列スイッチャーの動作をカスタマイズする方法は、一般に、独自のアドインをプログラミングしたり動作を変更したりする場合に役立ちます。 私たちはこれを JMP Clinical と JMP Genomics で常に行っており、それが私がクレジットした理由です。 @kelci_miclausそして@drewfogliaお借りしたコード用です。
これを実現できる JMP プロダクト マネージャーを知っていればよかったのですが。
お二人ともこの機能に投票してください。正当化に役立ちます。
最終的な変更については、自分で作成したラッパー コードで制御する必要があります。 API 呼び出しは、単に X 変数と Y 変数を置き換えることを目的としています。 プログラマーが GraphBuilder のラップを簡素化し、アドインをより速く構築できるように、これらの関数を今後も追加していきます。 ここで私が言いたいのは、API ファイル内の GraphBuilder を更新する関数を追加して、使用する「ドライバー」ファイルが選択動作を行えるようにすることだけです。 dt << clearrowstates(); を置くこともできることに注意してください。 ReplaceGB... 呼び出しの下にある呼び出しを使用して、テーブルに対する行の状態の変更を 1 か所で整理します。 また、このコードはローカル フィルターを使用して GraphBuilder レポートを変更するのではなく、メイン データ テーブルの行の状態を変更していることにも注意してください。 データ テーブルの複数のレポートが必要な場合は、アプローチを変更することもできます。 ただし、これらは単なるメモであり、JMP を使用して将来構築する可能性のあるアプリのための追加情報として意図されています。
ドライバー ファイル内のclearrowstatesに注目してください。
dt << clearrowstates();
newvarname = lb<<GETSELECTED></GETSELECTED>
あなたがやろうとしていることについての私の「単純な」理解に基づいて、単純に dt << clearrowstates(); を置き換えることをお勧めします。 dt付き<<除外を解除する();それがあなたが好む動作なのか、それともそれよりも複雑なのかをお知らせください。
Re: グラフ ビルダー: データのない X カテゴリを非表示にする完全にあなたと同意します@vince_faller 、それはとても素晴らしい機能でしょう:)
JMPウィッシュリストに追加しておこうと思います!
Re: グラフ ビルダー: データのない X カテゴリを非表示にするこれらのスクリプトをありがとうございました@geoffrey_mann
私がやったものより断然きれいです!
変更したいことが 1 つだけあります。リスト ボックスで新しい変数を選択するたびに、行のステータスがリセットされます。 したがって、いくつかのポイントにラベルが付けられたり、除外されたり、色が付けられたりすると、この情報が失われ、迷惑になる可能性があります。
それ以外は私の期待と一致しますので、またよろしくお願いします。
Re: グラフ ビルダー: データのない X カテゴリを非表示にするカラム スイッチに <Re: グラフ ビルダー: データのない X カテゴリを非表示にする
また会ったね@anne_sa 、
遅くなってごめんなさい、実は数日前からインフルエンザに罹ってしまい、少し遅れてしまいました。
2つのファイルを添付しました。 最初の jsl ファイル (行状態を変更するサンプル スクリプト.jsl) はドライバー ファイルで、2 行目のパスは 2 番目のファイル (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>
頑張ってください。何か問題があればお知らせください。 もちろん、これらのファイルは完全にはテストされていません。 
Re: グラフ ビルダー: データのない X カテゴリを非表示にするこんにちは@geoffrey_mann 、
基本的に列スイッチャーを更新し、軸設定を変更するものを書きました(提案されているように) @ジュリアン) 新しい変数を選択するたびに。 ただし、あまり効率的ではないかもしれないので、もちろん、私はあなたの解決策に非常に興味があります。
Re: グラフ ビルダー: データのない X カテゴリを非表示にするこんにちは、アンさん
問題に対するコーディングによる解決策が見つかったかどうかを確認するために、もう一度ご連絡したいと思います。 時間を見つけるのに時間がかかりましたが、それでも必要な場合はコーディングソリューションを用意しています。
Re: グラフ ビルダー: データのない X カテゴリを非表示にするこんにちは@ジュリアン!
私の問題を解決するために尽力していただいたことに本当に感謝しています。 残念ながら、非欠損レベルの数は、応答変数ごとに異なる場合があります。 ただし、最後の投稿は間違いなく「コーディング ソリューション」に使用できます。 レベル番号に基づいて軸の設定を変更することは、期待どおりの表示を実現する優れた方法です。 その方向で取り組んでいきます。 ご協力いただきありがとうございます!
Re: グラフ ビルダー: データのない X カテゴリを非表示にするこんにちは@anne_sa 、
あなたの言いたいことはわかります。 結局のところ、何かカスタムのコードを作成することになるかもしれませんが、これについてもう 1 つインタラクティブに試してみましょう。 各 Y のグループのレベルは常に 4 つだけ (レベルは異なります) ですか? もしそうなら、これは潜在的なハックです: グラフ ビルダーは列の切り替え時に X 軸を維持し、レベルを昇順に並べているので (したがって空白のレベルが常に最後にあります)、4 つのレベルのみが表示されるように軸を調整できます。 。 これは、軸の設定 (軸を右クリック > 軸の設定) で行うか、欠落しているレベルが非表示になるまで軸の端をドラッグするだけで実行できます。
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 )} ) )
);

おそらくあなたの場合の潜在的な解決策でしょうか?
@ジュリアン
Re: グラフ ビルダー: データのない X カテゴリを非表示にするありがとう@ジュリアンこの提案に対して! 実際、データのあるレベルのみを表示できます。
唯一の問題は (私が言いすぎかもしれませんが)、行間のリンクが失われることです。 たとえば、Y にレベル「a」を選択し、Y2 の対応する値を確認したい場合、ローカル データ フィルターで Y2 を選択しても何も強調表示されません。
おそらく、予想される動作をコーディングすることが解決策になるでしょう...
Re: グラフ ビルダー: データのない X カテゴリを非表示にするこんにちは@anne_sa 、
お気づきのとおり、グラフ ビルダーはグループ化変数のこれらのカテゴリを観察し、実際にそれらをプロットすることを主張します (これは通常は良いことです)。なぜなら、グラフ ビルダーはテーブルに保持されているので、それらのカテゴリに値があると想定しているからです。 列スイッチャーを使用する場合、他の列データが存在するため、単にそれらの行を削除するほど単純ではありません。 解決策の 1 つは、欠落している行を削除できるようにデータを再構築することです。 私ならこれをスタッキングして行います。
テーブル > スタック
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 の任意の数のレベルに一般化することもできます。最初のステップですべてのレベルを単純に積み重ねるだけです。
これがお役に立てば幸いです!
@ジュリアン
Re: グラフ ビルダー: データのない X カテゴリを非表示にするこんにちは、アンさん
あなたの問題を認識しており、現在も検討中です。 これには少しコーディングが必要になると思います。Re: グラフ ビルダー: データのない X カテゴリを非表示にするご回答有難うございます@geoffrey_mann
残念ながら、これはまさに私が取得したいものではありません。列スイッチャーで新しい列を選択すると、ローカル データ フィルターは依然として Y に基づいているためです。
もちろん、ローカル データ フィルターを手動で変更することは可能ですが、非常に多くの変数を使用できるため、それを自動的に行う方法があれば素晴らしいでしょう 
Re: グラフ ビルダー: データのない X カテゴリを非表示にするこんにちは、アンさん
「where」句、あるいは何らかのフィルターが必要であるというあなたの考えは正しいです。 グラフビルダー スクリプトに次の行を追加してみてください。
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 ) ) )
);
Re: グラフビルダー: データのないカテゴリをX個非表示にするこれは古い投稿ですが、それでもいくらか役立つかもしれません:
さらに、それぞれの Y に対して欠損値と逆数を選択するローカル データ フィルターを使用することもできます。
Local Data Filter(
Inverse( 1 ),
Add Filter( columns( :Y1, :Y2 ), Select Missing( :Y2 ) )
),
Column Switcher( :Y2, {:Y1, :Y2, :Y3} )
さらに、列スイッチャーの別のレベルを選択する際にイベントを追加することで、対象となるすべてのY変数のローカルデータスイッチャーのフィルター設定を変更できます。少しやり過ぎかもしれませんが、うまくいくかもしれません。
Re: グラフビルダー: データのないカテゴリをX個非表示にするこんにちは@martindemel 、
メッセージありがとうございます。かなり古い投稿ですが、同じ目的を達成するための様々な方法を発見するのはとても楽しいです。