JMP 11では、ユーザーが行の状態を定義するグループ化列を選択して凡例をカスタマイズできるプロットアプリケーションを作成しています。これには、親の境界ボックスを削除して古い凡例を削除し、新しい凡例を追加する必要があります。 ただし、2変量または可変プラットフォームで自動再計算が設定されている場合(他のプラットフォームはテストしていません)、これにより新しい凡例のコピーが新しい凡例に加えて再表示され、新しい凡例1つはFrameBox << Row Legendコマンドで生成されます。 さらに多くの凡例を選択すると、古い凡例がすべて表示されます。 データのフィルタリング方法に応じてトレンドラインと統計を再計算するには、自動再計算が必要です。 これに対する回避策はありますか?BorderBox << Deleteと言うよりも、凡例を削除するより良い方法はありますか?右クリックして凡例に「削除」と言うことができるGUIから知っています...これに相当するスクリプトコマンドはありますか?
「凡例付きウィンドウの作成」オプションを使用してデータテーブルの<< color by列を使用し、凡例(strincolbox子を持つテーブルボックス)を直接プロットに挿入することも検討しましたが、これにより凡例が失われます行選択機能を追加することはできません(カスタム凡例を実行するためにテーブルボックスにマーカーを配置する方法もわからないため、アクセスできないテーブルの非表示メソッドが必要です)。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />わかりましたので、簡単な回避策を思い付きました:問題のプラットフォームオブジェクトで自動再計算をオフにし(選択したテーブルで<< Get Scriptable Objectを使用して)、凡例を更新し、自動再計算をオンに戻しました。 奇妙なのは、自動再計算をオンにし、凡例の追加と削除を繰り返して、2変量のダミースクリプトを使用してこのバグを再現できなかったことです。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />だから、私はそれでたくさん遊んでいて、結局、組み込みのデータセットの1つを使用してさえ、この動作を再現することができました。 次のコードは、JMPをクラッシュさせる何らかの種類のメモリリークを引き起こします。
バグを再現する方法は次のとおりです。
(1)自動再計算が1に設定されたウィンドウ内にプラットフォームを作成する
(2)いくつかの凡例を追加する
(3)一部の行を除外する
(4)別の凡例を追加します。元の凡例の1つまたは両方を削除しても、JMPはフリーズします。
バグは、無限のメモリリークを介して機能するため、jmpによって徐々にメモリ使用量が増加すること(〜10 MB / s)として現れます。
このバグは、テーブル内のすべての行に対して除外状態を0に設定することで回避できます(つまり、For Each Row(Excluded(RowState())= 0)。
自動再計算によってオンにされるもう1つの癖は、作成された凡例を削除する前に強制的な時間遅延がない限り、凡例は削除されないという事実です。 自動再計算が0に設定されている場合、削除は問題なく行われます。
//クラッシュするコード
デフォルトの名前はHere(1);
Try(CLose(dt、nosave));
dt = Open( "$ SAMPLE_DATA / Big Class.jmp"、invisible);
dt <<行の状態をクリア;
obj = NewWindow( "test"、biv_container = HListbox(biv = Bivariate(Y(:weight)、X(:height)、Automatic Recalc(1))));
/ *
data_filter_container = ScrollBox(Size(200,500)、data_filter = dt << Data Filter(Add Filter(columns(:Sex、:Age、:Name、:Height、:Weight))));
data_filter << Mode(Select(1)、Show(1)、Include(1));
obj [OutlineBox( "身長による体重の二変量フィット")] << Sib Prepend(data_filter_container); * /
obj [OutlineBox( "高さによる重量の二変量フィット")] [FrameBox(1)] <<行Legend(:weight、Color(1)、Marker(0));
obj [OutlineBox( "高さによる重量の二変量フィット")] [FrameBox(1)] << Row Legend(:sex、Color(0)、Marker(1));
obj [OutlineBox( "高さによる重量の二変量フィット")] [FrameBox(1)] << Marker Size(6);
dt << Where(:sex == "F")<< Exclude;を選択します。
// Show(For Each Row(Excluded(RowState())= 0));
// dt << Where(:sex == "F")<< Uncludeを選択しない;
wait(0.1); //色の凡例を削除するのに必要な強制的な遅延
obj [OutlineBox( "身長による体重の二変量フィット")] [BorderBox(2)] << Delete;
obj [OutlineBox( "高さによる重量の二変量フィット")] [FrameBox(1)] << Row Legend(:height、Color(1)、Marker(0));
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />ああ、私が最終的にやったことは、dt << Make Rowstate Handler関数を使用して、行状態変更イベントを処理することです。これは非常に便利な機能です。 除外された状態が変化するたびに、プロットを更新する関数を破棄します。