PageByを使用して一連のグラフを作成するスクリプトがあります。 リストから取得した、各グラフに異なる参照線を追加したいと思います。
現在、参照線を追加するグラフを指定する方法を知っている唯一の方法は、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関数に適切に指定された整数インデックスを取得する方法がわからないことです。 ページバイ機能はグラフをいくつかの種類アルファベット順なので、Sort List(RefLineList)を使用すると、リストの順序がグラフの順序と一致すると思いました。
ただし、順序は完全には一致しません。たとえば、Page Byロールの変数が[A50、B50、B100]の場合、グラフは[A50、B50、 B100 ]ただし、ソートリストを使用して作成されたリストは順序付けられます[A50、 B100 、B50]。
整数インデックスではなく名前でページバイグラフを指定する方法はありますか? そうでない場合は、リストの順序がグラフの順序と一致するようにリストを並べ替える方法はありますか?
グラフビルダーはハイブリッドソートを使用しています。これがリスト値に対してそれを行う小さなスクリプトです
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
)
);