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 ] ただし、Sort List を使用して作成されたリストは [A50, B100 、B50]。
整数インデックスの代わりに名前で Page By グラフを指定する方法はありますか? そうでない場合、リストの順序がグラフの順序と一致するようにリストを並べ替える方法はありますか?
グラフ ビルダーはハイブリッド ソートを使用しています。リストの値に対してそれを行う小さなスクリプトを次に示します。
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
)
);