你好。 我很想知道有一種腳本方法可以讀取 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));
不過這個方法似乎不太實用。 是否有一個命令可以從圖形構建器參考或軸框中“獲取”軸值?
@尼克爾斯,
不確定你的使用者場景,但是,如果使用者主動過濾,他們還可以更改 GraphBuilder 結構、不同的角色等。所以過濾器更換處理程序會更加穩健。 另請注意,Where Clause() 不捕獲逆。 腳本和Where 的文字方塊將逆值捕獲為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 << 取得過濾後的行。