在圖形產生器中,我想僅顯示選定行的資料標籤(不是懸停標籤)。作為演示,我嘗試了以下程式碼:
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);然而,這感覺像是一個可怕的解決方法。函數內的Make Row State Handler語句似乎是必要的,因為在第一次呼叫f()後,處理程序會被遺忘(不確定我明白這裡發生了什麼!)。
我認為你可能需要使用一些東西來造成輕微的延遲。一種選擇是行狀態處理程序(這些可能非常不可靠)+運行公式
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);