在 Graph Builder 中,我只想显示选定行的数据标签(而不是悬停标签)。作为演示,我尝试了以下代码:
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();当我在数据表中、表格框中选择一行,或者在图形生成器中选择数据点时,它应该在“选定名称”中显示标签。但是,它似乎总是落后一个选定点!例如,我选择 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);