グラフ ビルダーで、選択した行のみにデータ ラベル (ホバー ラベルではない) を表示したいと思います。デモとして、次のコードを試しました。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Try(
Show( dt:Selected Name ),
dt << New Column( "Selected Name",
Character,
Set Formula( If( Selected( Row State( Row() ) ) == 1, :name ) )
)
);
dt:Name << Label( 0 );
dt << Clear Row States << Select All Rows << Label << Clear Select;
dt:Selected Name << Label( 1 );
// The following doesn't work as expected
gb1 = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 3 ) ) ),
SendToReport(
Dispatch( {}, "Graph Builder", FrameBox,
{Marker Size( 5 ), Marker Drawing Mode( "Normal" )}
)
)
);
nw1 = New Window( "DTB", dtb1 = Data Table Box( dt ) );
dtb1 << set selectable rows();データ テーブルで行を選択するか、テーブル ボックスから行を選択するか、グラフ ビルダーでデータ ポイントを選択すると、:Selected Name にラベルが表示されるはずです。ただし、常に 1 つの選択されたポイントが後ろに表示されているようです。たとえば、KATIE を選択すると、データ ポイントは強調表示されますが、ラベルはありません。次に LOUISE を選択すると、その行のデータ ポイントは強調表示されますが、KATIE のデータ ポイントにラベルが付けられます。

しかし、もう一度 LOUISE をクリックすると、正しくラベル付けされます。

最後に、すべての行の選択を解除すると、最後のラベルは表示されたままになります。
興味深いことに、次のコードを使用してテーブル ボックスとグラフ ビルダーを同じウィンドウに配置し、テーブル ボックスまたはグラフ ビルダー プロットから行を選択すると、期待どおりに動作し、選択した行のラベルのみが表示されます。
dt << clear select;
nw2 = New Window( "Demo",
H List Box(
dtb2 = Data Table Box( dt ),
gb2 = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 3 ) ) ),
SendToReport(
Dispatch( {}, "Graph Builder", FrameBox,
{Marker Size( 5 ), Marker Drawing Mode( "Normal" )}
)
)
)
)
);
dtb2 << set selectable rows();私が試みていることを実行するためのより良い方法はありますか?
この動作は JMP 17.2 と JMP 18 で発生します。
@jthi は次のように書きました:
私が提供したコードでは動作しませんか、またはあなたのデータで同様のアイデアを使用した場合 (私の場合は、Windows 10 で JMP17.2/JMP18.0 を使用して動作します)?
<< run 数式を使用する単純な関数は、Mac OS 13.6.7 上の JMP 17.2/18.0 では動作しません。
私が提供したコードでは動作しませんか、またはあなたのデータで同様のアイデアを使用した場合 (私の場合は、Windows 10 で JMP17.2/JMP18.0 を使用して動作します)?
ご提案ありがとうございます。残念ながら、そのままではうまくいきませんでしたが、次の方法ではうまくいきました。
f = Function({a},
rr = dt << get selected rows;
dt << clear select;
wait(0);
dt << select rows( rr );
rs = dt << Make Row State Handler(f);
);
rs = dt << Make Row State Handler(f);しかし、これはひどい回避策のように思えます。関数内のMake Row State Handlerステートメントは、f()の最初の呼び出し後にハンドラーが忘れられてしまうため、必要なようです (ここで何が起こっているのかよくわかりません)。
少し遅延させるために何かを使う必要があるかもしれません。1つの選択肢は行状態ハンドラー(これは非常に信頼性が低い可能性があります)+数式の実行です。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Try(
Show(dt:Selected Name),
dt << New Column("Selected Name",
Character,
Set Formula(If(Selected(Row State(Row())) == 1, :name))
)
);
dt:Name << Label(0);
dt << Clear Row States << Select All Rows << Label << Clear Select;
dt:Selected Name << Label(1);
// The following doesn't work as expected
gb1 = dt << Graph Builder(
Show Control Panel(0),
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y, Legend(3))),
SendToReport(
Dispatch({}, "Graph Builder", FrameBox, {Marker Size(5), Marker Drawing Mode("Normal")})
)
);
nw1 = New Window("DTB", dtb1 = Data Table Box(dt));
dtb1 << set selectable rows();
f = Function({a},
dt << run formulas;
);
rs = dtb1 << Make RowState Handler(f);