그래프 빌더에서 선택한 행에 대해서만 데이터 레이블(호버 레이블 아님)을 표시하고 싶습니다. 데모로 다음 코드를 시도했습니다.
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에 레이블이 표시되어야 합니다. 그러나 항상 하나의 선택된 지점이 뒤처져 있는 것 같습니다! 예를 들어 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을 사용하여 작동합니다).
<< 실행 수식을 사용하는 간단한 함수는 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);그러나 그것은 끔찍한 해결 방법처럼 느껴집니다. f()를 처음 호출한 후 핸들러가 잊혀지기 때문에 함수 내부의 Make Row State Handler 문이 필요한 것 같습니다(여기서 무슨 일이 일어나고 있는지 잘 모르겠습니다!).
약간의 지연을 일으키기 위해 뭔가를 사용해야 할 수도 있다고 생각합니다. 한 가지 옵션은 행 상태 처리기(매우 신뢰할 수 없음) + 수식 실행입니다.
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);