我有一个脚本,可以在其中使用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函数似乎将图形放入某种的字母顺序,所以我想如果我使用Sort List(RefLineList),则列表的顺序将与图形的顺序匹配。
但是排序并不完全一致:例如,如果Page By角色中的变量为[A50,B50,B100],则图形将排序为[A50,B50, B100 ],但使用“排序列表”创建的列表将被排序[A50, B100 ,B50]。
有没有一种方法可以通过名称而不是整数索引来指定Page By图? 如果没有,是否可以对列表进行排序,使列表顺序与图顺序匹配?
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
)
);