你好。 我很想知道有一种脚本方法可以读取graphbuilder中轴的显示值并将它们作为列表返回。 IOW,是否有可以从图形生成器参考或轴框“获取”轴值的函数或消息? 类似于:xval_lis = gb << 获取 X 轴值。
例如,假设我有以下图表:

dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size(513, 406),
Show Control Panel(0),
Back Color("White"),
Variables(X(:age), X(:sex, Position(1)), Y(:weight)),
Elements(Points(X(1), Y, Legend(1)), Smoother(X(1), Y, Legend(2))),
Local Data Filter(
Add Filter(
columns(:age),
Where(:age == {12, 13, 14}),
Display(:age, Size(170, 96), List Display)
)
),
SendToReport(Dispatch({}, "", AxisBox, {Select}))
)此处,由于用户已使用本地数据过滤器排除了某些年龄,因此并非表中的所有年龄都显示在 x 轴上。 在这种情况下,我想要一种方法来读取图表中实际显示的年龄。 此问题仅适用于轴使用名义型或有序型变量(无连续变量)时。
我考虑过以下脚本方法:
1.读取本地数据过滤器
2. 创建一个仅包含未过滤行的子表
3. 使用该表上的 Summarize 函数来获取我的显示轴值列表
ldf_str = ldf << Get Where Clause; //ldf = reference to local data filter in gb window
clause = Parse(Regex(ldf_str, "Select Where\((.+)\)$", "\1"));
r = dt << Get Rows Where(Eval(clause)); //dt = ref to main datable
dtsub = dt << Subset(//Invisible,
Selected Rows(0),
Rows(r),
Selected columns only(0)
);
Summarize(dtsub, xlev_lis = By(:age, :sex));
这种方法虽然看起来很笨拙。 是否有可以从图形生成器参考或轴框“获取”轴值的命令?
@nikles ,
不确定您的用户场景,但是,如果用户正在积极过滤,他们还可以更改 GraphBuilder 结构、不同的角色等。所以过滤器更改处理程序会更健壮。 另请注意 Where Clause() 不捕获逆。 Where 的脚本和 TextBox 将 Inverse 捕获为 Not (!)

下面和附件是一个脚本,当过滤器更改时,它会获取 Xticks 并将它们打印到日志中。这是带有注释 (//) 和额外换行符的嵌入式日志的屏幕截图。

Names Default to Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size(513, 406),
Show Control Panel(0),
Back Color("White"),
Variables(X(:age), X(:sex, Position(1)), Y(:weight)),
Elements(Points(X(1), Y, Legend(1)), Smoother(X(1), Y, Legend(2))),
Local Data Filter(
Add Filter(
columns(:age),
Where(:age == {12, 13, 14}),
Display(:age, Size(170, 96), List Display)
)
),
SendToReport(Dispatch({}, "", AxisBox, {Select}))
);
//iftb = (report(gb)[PictureBox(1)]<<SIB></SIB>
笔记:
- 注释第 20 行;它显示了如何获取 Where TextBox 的句柄。
- 用于过滤器更改处理程序的函数 f 的主要特征是关联数组的 JMP 实现的能力:定义它的多种方法;获取列表中的唯一值;几乎任何 JMP 对象都可以用作键。
- 其他关键特性是: dt[ zz, _xvar_] 是行值列表,而 ldf << 获取过滤的行。