我有一个脚本,我在其中使用 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
)
);