你好。 我很想知道有一種腳本方法可以讀取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 << 獲取過濾的行。