こんにちはJSLコミュニティ!
のバリエーションを使用しました動的なグラフの凡例のコード 、1回クリックするだけでグラフの凡例を自動的に変更するので、非常に効果的です。
ただし、ローカルデータフィルターをグラフに含めようとすると、何らかの理由で、フィルターをクリックした後、古い/前の凡例の境界ボックスが再表示され続けます。私は見つけました前の議論基本的には同じ問題ですが、残念ながら2014年からのトレンドは独白であり、TSのすべてのステップを試しても、どれも私のケースでは機能しません。
凡例自体は正しい(データには正しい色とマーカーが表示されます)が、レポートウィンドウは以前のすべての境界ボックスで非常に忙しくなります。
ローカルデータフィルターが押された後、不要な「凡例」をすべて削除するための追加のボタンを追加しただけで、回避策がありましたが、別のフィルターにヒットするたびに再表示されます。また、ローカルデータフィルター内に「削除」ボタンのコードを追加できませんでした(フィルター機能を使用すると、余分な不要な凡例ボックスもすべて削除されます)。
グラフ内の以前の凡例に保存されている「メモリ」を削除する方法があるかどうか疑問に思っています。または、この場合に使用できる回避策。
ヘルプとサポートを事前に感謝します!!!
ローカルデータフィルターを使用する前のグラフ
ローカルデータフィルターを使用した後のグラフ

使用しているプラットフォームと凡例の追加方法を示すサンプルJMPデータテーブルの1つで動作するスクリプトを含めることができますか?
返信ありがとうございます。便宜上、このコードを使用します役職グラフのローカルデータフィルタセクションを追加しました。
//Begin Script;
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
variables = {"age", "sex"};
// Initial nlevels is the number of levels of 'age', as it is the first by-group used.
fitVar = "age";
nlevels=6;
// Creating the legend. For each selection, the previous spline fits are removed, then
// new ones are generated.
BC_legend = Panel Box( "Choose Legend",
legend = Radio Box(
{"age", "sex"},
fitVar = legend << Get Selected;
Match( fitVar,
"age",
(Summarize(vals = By( :age ), c=count );
For(ii = nlevels, ii >=1, ii--,
obj << (Curve[1] << Remove Fit );
);
report(obj)[BorderBox(2)] << Delete;
report(obj)[FrameBox(1)] << Row Legend("age", color(1), marker(1));
obj << Group By( :age ) << Fit Spline( 0.1, standardized );
nlevels = nItems(vals);
),
"sex",
(Summarize(vals = By( :sex ), c=count );
For(ii = nlevels, ii >=1, ii--,
obj << (Curve[1] << Remove Fit );
);
report(obj)[BorderBox(2)] << Delete;
report(obj)[FrameBox(1)] << Row Legend("sex", color(1), marker(1));
obj << Group By( :sex ) << Fit Spline( 0.1, standardized );
nlevels = nItems(vals); )
);
));
// Fitting the initial Bivariate fit with 'age' as the by-group, adding the legend
// to control the selections.
nw = New Window( "BigClassBivariate",
HListBox(
obj = dt << Bivariate(
Y( :weight ),
X( :height ),
Group By( :age ),
Fit Spline( 0.1, standardized ),
Local Data Filter(
Location( {0, 0} ),
Mode( Select( 0 ), Show( 1 ), Include( 1 ) ),
Add Filter(
columns( :age ),
Display( :age, Size( 204, 200 ), List Display )
)
),
SendToReport(
Dispatch(
{},
"Bivar Plot",
FrameBox,
{Frame Size( 493, 354 ),Marker Size( 2 ), Marker Drawing Mode( "Normal" ), Row Legend(
dt:(fitVar),
Color( 1 ),
Color Theme( "JMP Default" ),
Marker( 0 ),
Marker Theme( "Standard" ),
Continuous Scale( Cont ),
Reverse Scale( 0 ),
Excluded Rows( 0 )
)}
)
)
); ,
BC_legend
));
//End Script;
元の投稿に画像を正しくアップロードしなかったことに気付きませんでした。
ローカルデータフィルターを使用する前のグラフ

ローカルデータフィルターを使用した後のグラフ

したがって、上記のコードの例として。インターフェースの凡例選択セクションで「年齢」と「性別」の間を数回クリックし、ローカルフィルターと「古い」凡例をポップバックします。

まず、この問題はJMP 15で解決されたようです。 幸いなことに、以前のバージョンには簡単な回避策があります。
次を使用して古い凡例を削除する場合:
report(obj)[BorderBox(2)] << Delete;
凡例の表示部分は削除されますが、DisplayFrameにはまだ古い凡例へのハンドルがあり、新しい凡例を追加すると2つになります。 データフィルターに触れる前にこれを確認することもできます。レポートのスクリプトを保存すると、2つのRowLegend()コマンドが表示されます。 データフィルターの有無にかかわらず、レポートでREDO分析を使用すると、2つの凡例が再び表示されます。
凡例の表示部分だけでなく、凡例が完全に削除されるようにするには、box deleteを次のように置き換えます。
report(obj)[OwnerBox(1)] << Remove;
これは、凡例を右クリックして[削除]を選択することと同等で、適切に削除します。
お役に立てば幸いです!
うまくいきました!!!!本当にありがとう!!!!私のコードは今きれいです!!!