グラフ ビルダーで列の変数リストを Y 軸として使用する皆さん、
JMP14 Pro から JMP15 Pro にアップグレードしたところ、OverlayPlots を使用する JSL スクリプトの多くで問題が発生しています。より複雑なOPの一部をGBに変換しようとしていますが、GBで変数リストを使用するときに問題が発生しています。OP を使用すると、次のコードは Y( Eval List ( ???? ) ) 基準を満たす特定のデータ ファイルのすべての変数を正常にプロットしました。このコードは、さまざまな現場でプロットしたいセンサーの数が異なる可能性があるという事実に対応するために作成しました。
// Potential Tair Data
pot_tair_list = {"Datalogger Internal Temperature (C)", "Air Temperature - HMP - 5m (C)", "Air Temperature - HMP (C)",
"Air Temperature, STD - HMP (C)", "Air Temperature - WXT (C)", "Air Temperature @ 5m - HMP (C)", "Air Temperature - MA4100 (C)",
"Air Temperature - EE181 (C)", "Air Temperature - WS700 (C)", "Air Temperature - GMX541 (C)"};
// Create empty list to hold names of the those measurement variables found in data table
act_tair_list = {};
// Run through data table column names and put those that match measurement variable list into new list
For( i = 1, i <= N Items( pot_tair_list ), i++,
If( Contains( dt_col_name_list, pot_tair_list[i] ),
Insert Into( act_tair_list, pot_tair_list[i] )
)
);
******************************
// Plot Air Temperature data
If( N Items( act_tair_list ) > 0,
Graph Builder(
Size( 1600, 500 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Legend Position( "Right" ),
Fit to Window( "Off" ),
Graph Spacing( 3 ),
Variables( X( :Name( "Date & Time" ) ), Y( Eval List( act_tair_list ) ) ),
Elements( Line( X, Y, Legend( 4 ) ), Points( X, Y, Legend( 1 ) ) ),
SendToReport(
Dispatch(
{},
"Date & Time",
ScaleBox,
{Format( "m/d/y", 10 ), Min( sdate ), Max( edate ), Interval( "Day" ), Inc( 28 ), Minor Ticks( 0 )}
),
Dispatch(
{},
Y( Eval List( act_tair_list ) ),
ScaleBox,
{Format( "Fixed Dec", 10, 0 ), Inc ( 5 ), Show Major Grid( 1 ), Minor Ticks( 0 )}
),
Dispatch(
{},
"400",
ScaleBox,
{Legend Model( 1, Properties( 0, {Line Color( 3 ), Fill Color( 0 )}, Item ID( "Battery (V)", 1 ) ) )}
),
Dispatch( {}, "Graph Builder", FrameBox, {Marker Size( 1 )} )
)
)
);
GB は、私が OP で使用したのと同じリスト構造を好まないため、次のエラーをスローします。
指定された列がデータ テーブルに見つかりません。{191471} 'Y' のアクセスまたは評価で、Y( Eval List( act_tair_list ) ) /*###*/プラットフォーム起動の例外{191471} 'Graph Builder のアクセスまたは評価で'
私は OP プラットフォームを使用して JSL グラフ作成の大部分を完了しましたが、この問題を解決する方法についての知識がありません。
Y 軸の変数リストを GB に渡すことは可能ですか?可能であれば、その形式はどのようなものになりますか? 実際に特定のセンサーが存在するかどうかに関係なく、すべての現場ですべての変数に対して単一のグラフ作成スクリプトを使用し続けることができるよう、この問題を解決するためにご協力いただければ幸いです。ありがとう。
Re: グラフ ビルダーで列の変数リストを Y 軸として使用するNames Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
col = { :Runtime, :RunPulse, :RstPulse };
var expr = Expr( Variables( X( :Weight ) ) );
For( c = 1, c <= N Items( col ), c++,
y expr = Expr( Y( Position( 1 ) ) );
Insert Into( y expr, col[c], 1 );
Insert Into( var expr, Name Expr( y expr) );
);
Eval(
Substitute(
Expr(
gb = dt << Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
vvv,
Elements(
Points( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 3 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 4 ) )
)
);
),
Expr( vvv ),
Name Expr( var expr )
)
);Re: グラフ ビルダーで列の変数リストを Y 軸として使用する考え方はシンプルです。 Substitute() は式内の式を検索するため、メイン式内に珍しい式 vvv を入れて、それが明確なターゲットになるようにしました。 この関数は、それを Y ロールの列用に作成した式に置き換えます。
「」が何を意味するのかわかりません。 GB 命令の最後で実際の変数リストを呼び出します。 」 私はそのようなことは一切行っておりません。 あなたが何を指しているのか推測しますが、実行中のコードと式の違いについて混乱しているとしか言えません。 また、関数呼び出しまたはメッセージ送信の名前付き引数は位置に依存しません。
Eval() 式を選択し、このコードを単独で実行すると有益な場合があります。 評価される新しい式が生成されます。
このケースは、式の単純な適用です。 JMP スクリプト ガイドを読むか、スクリプトの導入に関するクラスに参加する必要があります。
Re: グラフ ビルダーで列の変数リストを Y 軸として使用するマーク、
あなたのソリューションのもう1つの点は、各変数を同じパネルにすべてプロットするのではなく、個別のパネルにプロットすることです。これが最終的に私が望むものです。以下のコードは、私が作りたいものを示しています。コードをさまざまに変更してみましたが、役に立ちませんでした。これを実現する方法について提案をしていただけますか?ありがとう。
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
Graph Builder(
Fit to Window( "Off" ),
Graph Spacing( 3 ),
Variables(
X( :Weight ),
Y( :Runtime ),
Y( :RunPulse, Position( 1 ) ),
Y( :RstPulse, Position( 1 ) )
),
Elements(
Points( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 3 ) ),
Line( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 6 ) )
),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
3,
Base( 0, 0, 0, Item ID( "Runtime", 1 ) ),
Base( 1, 0, 0, Item ID( "RunPulse", 1 ) ),
Base( 2, 0, 0, Item ID( "RstPulse", 1 ) )
)}
),
Dispatch(
{},
"400",
LegendBox,
{Legend Position( {3, [-1, -1, -1], 6, [0, 1, 2]} ),
Position( {-1, -1, -1, 0, 1, 2} )}
)
)
);
Re: グラフ ビルダーで列の変数リストを Y 軸として使用するマークさん、とても役立つ提案をありがとう、
この場所で Name Expr ( var expr ) を呼び出す代わりに、プレースホルダー vvv のようなものを使用する必要がある理由を説明できますか?これを実行するとグラフが生成されないことがわかりますが、vvv が必要であり、変数が通常宣言される場所ではなく、GB 命令の最後で実際の変数リストを呼び出す理由がわかりません。
Re: グラフ ビルダーで列の変数リストを Y 軸として使用するグラフ ビルダーの起動は、オーバーレイ プロットの起動と同じようには機能しません。 オーバーレイ プロットは、列参照または列参照のリストを受け入れる 1 つの名前付き引数 Y() を使用しました。 グラフ ビルダーは、そのロールの列ごとに個別の Y() 引数を使用して起動します。 以下は、フィットネス データ テーブルに基づく例です。
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
gb = dt << Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Variables(
X( :Weight ),
Y( :Runtime ),
Y( :RunPulse, Position( 1 ) ),
Y( :RstPulse, Position( 1 ) )
),
Elements(
Points( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 3 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 4 ) )
)
);
1 つのアプローチは、式を使用することです。 Insert Into() 関数と Substitute() 関数を使用すると、必要な起動式を簡単に作成できます。
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
col = { :Runtime, :RunPulse, :RstPulse };
var expr = Expr( Variables( X( :Weight ) ) );
For( c = 1, c <= N Items( col ), c++,
y expr = Expr( Y() );
Insert Into( y expr, col[c] );
Insert Into( var expr, Name Expr( y expr) );
);
Eval(
Substitute(
Expr(
gb = dt << Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
vvv,
Elements(
Points( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 3 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 4 ) )
)
);
),
Expr( vvv ),
Name Expr( var expr )
)
);Re: グラフビルダーで列の変数リストを Y 軸として使用する素晴らしい説明をありがとうございます。私は、スクリプトを使い始めた従業員に Substitute を教えようとしています。この例は、以下のセクションの 3 つのグラフに対してハードコードされていることに気づきました。リストに 4 番目の列を追加しても (col = {:Runtime、:RunPulse、:RstPulse、:MaxPulse} のように)、Graph Builder には 3 つのグラフがプロットされるだけです。
Elements(
Points( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 3 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 4 ) )
)
For ループでもこれらの式を設定する簡単な方法はありますか? 新しい式は Elements() で始まるべきなのか、それとも「var expr」のように Points() 式と Smoother() 式を組み立てることでできるのか、よくわかりません。 いろいろ試してみますが、Substitute が式として認識するものについて何か他のトリックがあるか、または式のどのレベルから始めるのが推奨されるかを知りたいです。 たとえば、var expr を「Variables (X (:Weight))」で始めて、Y を挿入しました。 これはベスト プラクティスですか?