我有一個腳本,我在其中使用 Page By 創建一組圖形。 我想為從列表中提取的每個圖形添加不同的參考線。
目前我知道如何指定將參考線添加到哪些圖形的唯一方法是使用 ScaleBox 通過其整數索引(似乎從 2 開始)引用圖形。 (如果有比使用整數索引更好的方法,請告訴我。)例如:
For( i= 1, i<= n, i+=1,
RefLineValue= RefLineList[i];
mygraph << SendToReport(
Dispatch(
{},
"Data",
ScaleBox( i+1 ),
{Add Ref Line( RefLineValue, "Solid", "Black", "", 1 )}
);
)
);這幾乎可行,但我的問題是我不知道如何為 ScaleBox 函數正確指定整數索引。 Page By 函數似乎將圖表放入某種按字母順序排列,所以我想如果我使用排序列表( RefLineList ),那麼列表的順序將與圖表的順序相匹配。
但是排序並不完全匹配:例如,如果 Page By 角色中的變量是 [A50, B50, B100],那麼圖表將被排序為 [A50, B50, B100 ] 但使用排序列表創建的列表將被排序 [A50, B100 , B50]。
有沒有辦法通過名稱而不是整數索引來指定分頁圖表? 如果沒有,有沒有辦法對我的列表進行排序,使列表順序與圖形順序相匹配?
Graph Builder 使用混合排序。這是一個小腳本,可以為您的列表值執行此操作
refList = {"B100", "A50", "B50"};
For( i = 1, i <= N Items( refList ), i++,
If( Length( refList[i] ) < 4,
refList[i] = Substr( refList[i], 1, 1 ) ||
Substr( "00", Length( refList[i] ) - 1 ) ||
Substr( refList[i], 2 )
);
);
refList = Sort List( refList );
For( i = 1, i <= N Items( refList ), i++,
While( Length( Word( 1, refList[i], "0" ) ) == 1,
refList[i] = Substr( refList[i], 1, 1 ) ||
Substr( refList[i], 3 )
)
);
我還建議您看看使用更簡單的方法來設置參考線。如果直接轉到要添加參考線的 AxisBox,則使用更簡單的代碼即可完成。下面是一個例子。此外,腳本指南有完整的部分介紹如何使用顯示樹,腳本索引有所有函數的定義和示例。
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
refList = {60,65};
gb = dt << Graph Builder(
Size( 528, 956 ),
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ), Page( :sex ) ),
Elements( Points( X, Y, Legend( 8 ) ), Smoother( X, Y, Legend( 9 ) ) )
);
Summarize( dt, groups = by( :Sex ) );
For( i = 1, i <= N Items( groups ), i++,
Report( gb )[axisbox( i * 2 )] << Add Ref Line(
refList[i],
"Solid",
"Black",
"",
1
)
);