インタラクティブプロットインタラクティブなレポートを作成する方法について何かアイデアをお持ちの方はいらっしゃいますか?
レポートでは、各グラフに複数の線を含むグラフを含めたいと思います。ウィンドウの左側に、線のリストを表示したいと思います。リストから線をクリックすると、グラフ内の選択した線がより目立つようになり、残りの線はフェードアウトします。
データの探索と視覚化インタラクティブプロットについて左側に凡例を配置するのは少し難しいかもしれませんが、右側に問題がなければ、基本的なグラフビルダーで十分です。

https://www.jmp.com/support/help/ja/18.0/#page/jmp/graph-builder.shtml#
インタラクティブプロットについてこんにちは!グラフ ビルダーを使用して、for ループを使用して複数のグラフを作成しました。ここで、これらすべてのグラフを 1 つのシートにグループ化し、ユーザーがすべてのグラフをまとめて操作できるインタラクティブ インターフェイスを作成したいと考えています。これを実現する方法はありますか? ありがとうございます!
インタラクティブプロットについて基本的なグラフ ビルダーだけを使用するのは良いアイデアです。すべてのグラフを作成した後、それらをすべて下に並べて配置したいだけです。
インタラクティブプロットについてもう少し情報が必要です。たとえば、Vリストボックスに収集して、新しいウィンドウを使用して表示することができます。
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = V List Box();
For(i = 1, i <= 3, i++,
gb_collector << Append(
dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
)
);
nw = New Window("",
gb_collector
);
For ループを使用している場合は、スクリプトを実行していると思います。スクリプト ガイド (例: https://www.jmp.com/support/help/en/18.0/#page/jmp/examples-of-creating-a-dashboard-from-two-reports.shtml# ) を読みましたか。
インタラクティブプロットについてタブ ページ ボックス メソッドを for ループと組み合わせたいのですが、うまくいきません。
これが私の脚本の一部です:
新しいウィンドウ("マイダッシュボード",
Hスプリッターボックス(
サイズ(1000, 1000)、
// 各パラメータをループする
i = 1, i <= N 項目(numPar)の場合、i++、
// すべてのバッチ、実際のデータ、および差異のプロットの列ボックス
col1 = 列ボックス(""),
col2 = 列ボックス(""),
col3 = 列ボックス(""),
// 各パラメータのタブページボックス
タブページボックス(
タイトル(numPar[i] || " vs. Time Point"),
// すべてのバッチプロットを作成する
gb = グラフビルダー(
サイズ(500, 500)、
変数(X(:時点月数), Y(:結果), オーバーレイ(:バッチ)),
要素(ポイント(X, Y))
)、
// ローカル フィルター: 参照を持つ cyc 内のバッチのみにバッチを設定し、他のすべてのバッチには設定しません。
gb << ローカルデータフィルター(
見えない、
フィルターの追加(列(:コンポーネント、:バッチ、:ソーステーブル)、
ここで(:Component == numPar[i])、
ここで(:バッチ == {cyc, bat})、
Where(:ソーステーブル == dt_name)
)
)、
dt << 選択をクリア()、
// グラフからフィルタ表示を削除します
gb << コントロールパネルを表示(0),
// プロット変更レポート
gbb = レポート(gb)[グラフビルダーボックス(1)],
// 線形回帰を追加
gbb << 要素を追加(1, 1, {タイプ("適合線"), X, Y, 適合の信頼度(0), 方程式(0)}),
// Y軸を設定
minval = min(:Result[dt << get rows where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 0.95,
maxval = max(:Result[dt << get rows where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 1.05,
maxvalts = max(:Time Point Months[dt << get rows where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 1.05,
gbb[軸ボックス(1)] << 最小(-0.1),
gbb[AxisBox(1)] << max(maxvalts),
gbb[AxisBox(2)] << min(minval),
gbb[AxisBox(2)] << max(maxval),
gbb[AxisBox(2)] << inc((最大値 - 最小値) / 10),
// Y軸ラベルを設定する
unitList = 連想配列(:Result Unit[dt << 行を取得 where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) << Remove("") << キーを取得、
N 個のアイテム(ユニットリスト) == 1 の場合、
gbb[テキスト編集ボックス(4)] << Set text(numPar[i] || " [" || unitList[1] || "]")
、
gbb[テキスト編集ボックス(4)] << テキストを設定(numPar[i])
)、
// グラフのタイトルを設定する
gbb[テキスト編集ボックス(1)] << Set text(numPar[i] || " vs. Time Point"),
// 追加
gbba = レポート(gb)、
col1 << 追加(gbba)、
< )
)
)、
< );
インタラクティブプロットについてNames Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = Tab Box(<< Set Style("Horizontal Spread"));
For(i = 1, i <= 3, i++,
gb_collector << Add("Title",
dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
)
);
nw = New Window("",
gb_collector
);インタラクティブプロットについてお使いのjmpのバージョンは何ですか?あなたのjmpで動作しますか?上記のスクリプトを使用しても期待どおりの出力が得られないため
インタラクティブプロットについて期待される出力が何なのかわかりませんし、データも持っていません。スクリプトはタブボックスを使用してforループから結果を収集します。

インタラクティブプロットについて上記のスクリプトを実行すると、この出力が得られます。これはあなたのものと同じではありません
インタラクティブプロットについてJMP18では変更されたようです。JMP17.2ではこれでうまくいったようです
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = Tab Box(<< Set Style("Horizontal Spread"));
For(i = 1, i <= 3, i++,
tab = Tab Page Box("",
gb = dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
);
tab << Title("Title " || Char(i));
gb << title(Char(i));
gb_collector << Append(tab)
);
nw = New Window("",
gb_collector
);インタラクティブプロットについて解決したいもう 1 つの問題は、長いタイトルのタブが多数 (たとえば 20 個) ある場合、グラフが不釣り合いに大きくなり、はっきりと観察するのが難しくなることです。大きなタイトルとタブを保持したまま、グラフのサイズを小さくしたいと思います。グラフを左側に配置し、右側に空きスペースを残すことは可能ですか?
インタラクティブプロットについて「左側にグラフ、右側に空きスペース」とはどういう意味かわかりません。グラフを手動で作成し、少しサイズを変更してスクリプトをコピーすると、グラフにサイズを追加する方法がわかります。タブ ボックスには、オーバーフローやその他のオプションもあり、スクリプト インデックスから見つけることができます。

インタラクティブプロットについてこのスクリーンショットのようにグラフを配置する方法があるかどうか調べています。たとえば、最初に最初のグラフを配置し、次に他の 2 つを一緒に配置します。
インタラクティブプロットについてたとえば、V リスト ボックス、H リスト ボックス、タブ ボックス、タブ ページ ボックスをさまざまな方法で組み合わせて、必要なレイアウトを実現できます。
スクリプトガイドhttps://www.jmp.com/support/help/en/18.0/#page/jmp/construct-display-boxes-for-new-windows.shtmlから多くの情報を見つけることができます。
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_expr = Expr(dt << Graph Builder(
Show Control Panel(0),
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
));
nw = New Window("",
V List Box(
gb_expr,
H List Box(
gb_expr,
gb_expr
)
)
);インタラクティブプロットについて名前はデフォルトでここに設定されます( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb_collector = Tab Box( "ダッシュボード" );
i = 1, i <= 20, i++, の場合
// すべてのバッチのプロットの列ボックス
col1 = Col Box( "すべてのバッチ" || Char( i ) );
// 最初のグラフビルダープロットを作成する
gb = 式(
dt << グラフビルダー(
見えない、
変数( X( :体重 ), Y( :身長 ), オーバーレイ( :性別 ) ),
要素(ポイント(X、Y、凡例(9))、適合線(X、Y、凡例(11)))
)
);
col1 << 追加( gb );
// 2つのグラフビルダープロットの列ボックスを作成します
col2 = Col Box( "実際のデータ " || Char( i ) );
// 2つのグラフビルダープロットを作成し、col2に追加します
j = 1, j <= 2, j++の場合、
gbb = 式(
dt << グラフビルダー(
見えない、
変数( X( :体重 ), Y( :身長 ), オーバーレイ( :性別 ) ),
要素(ポイント(X、Y、凡例(9))、適合線(X、Y、凡例(11)))
)
);
col2 << 追加( gbb );
);
// col1 と col2 のタブを作成し、gb_collector に追加します
tab = タブページボックス( " 何か 何か ",
V リストボックス(
列1、
H リストボックス(col2) // 2つのプロットを隣り合わせに配置する
)
);
gb_collector << Append(タブ);
// gb のタイトルを設定する
gb << title( "dxfkgbdlk,xfhglihxfd" );
);
gb_collector << ドッキング可能( 1 );
gb_collector << オーバーフローを有効にする(1);
nw = 新しいウィンドウ( "ダッシュボード",
gb_collector
);
上記の例をスクリプトで使用しようとしましたが、出力が得られません。これが私のスクリプトです:
現在のデータテーブル(dt);
dt << 新しい列("時点の月数", 数式(Round(:時点の日数/30.438), 2));
gb_collector = タブボックス();
i = 1, i <= N 項目(numPar)の場合、i++、
// すべてのバッチのプロットの列ボックス
col1 = コルボックス( "" );
// 実際のデータのプロット用の列ボックス
col2 = コルボックス( "" );
// 差のプロットの列ボックス
col3 = コルボックス( "" );
//tab = タブページボックス("",
gb = dt << グラフビルダー(
//見えない、
サイズ(700, 400)、
変数(X(:時点月数), Y(:結果), オーバーレイ(:バッチ)),
要素(ポイント(X, Y))
);
// ローカル フィルター: 参照を持つ cyc 内のバッチのみにバッチを設定し、他のすべてのバッチには設定しません。
gb << ローカルデータフィルター(
見えない、
フィルターの追加(列(:コンポーネント、:バッチ、:ソーステーブル)、
ここで(:Component == numPar[i])、
ここで(:バッチ == {cyc, bat})、
Where(:ソーステーブル == dt_name)
)
);
dt << Clear Select();
// グラフからフィルタ表示を削除します
gb << コントロールパネルを表示(0);
// プロット変更レポート
gbb = レポート(gb)[グラフビルダーボックス(1)];
// 線形回帰を追加
gbb << Add Element(1, 1, {Type("Line Of Fit"), X, Y, Confidence of Fit(0), Equation(0)});
// Y軸を設定
minval = min(:Result[dt << get rows where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 0.95;
maxval = max(:Result[dt << get rows where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 1.05;
maxvalts = max(:Time Point Months[dt << get rows where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 1.05;
gbb[軸ボックス(1)] << 最小(-0.1);
gbb[AxisBox(1)] << max(maxvalts);
gbb[AxisBox(2)] << min(minval);
gbb[AxisBox(2)] << max(maxval);
gbb[AxisBox(2)] << inc((最大値 - 最小値) / 10);
// Y軸ラベルを設定する
unitList = 連想配列(:Result Unit[dt << get rows where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) << Remove("") << Get Keys;
N 個のアイテム(ユニットリスト) == 1 の場合、
gbb[テキスト編集ボックス(4)] << Set text(numPar[i] || " [" || unitList[1] || "]")
,
gbb[テキスト編集ボックス(4)] << テキストを設定(numPar[i])
);
// グラフのタイトルを設定する
gbb[テキスト編集ボックス(1)] << Set text(numPar[i] || " vs. Time Point");
// 追加
//gbba = レポート(gb)、
col1 << 追加(gb);
//フィルター << 閉じる;
gb << ウィンドウを閉じる;
// パラメータのループ内でバッチもループするようになりました
k = 1, k <= N 項目( cyc ), k++,
check = dt << 行を取得 where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name | :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name);
if(N items(check) > 0, // 現在のバッチにパラメータが存在するかどうかを確認するチェックを作成します
// ベースプロットを作成
gb = グラフビルダー(
//見えない、
サイズ(700, 400)、
変数( X( :時点の月数 ), Y( :結果 ), オーバーレイ( :バッチ ) ),
要素(ポイント(X,Y)、)
);
gb << ローカル データ フィルター(invisible、フィルターの追加( columns( :Component、 :Batch、 :Source Table )、 Where( :Component == numPar[i] )、 Where( :Batch == {cyc[k]、 bat[k]})、 Where( :Source Table == dt_name) ));
dt << Clear Select();
// グラフからフィルタ表示を削除します
gb << コントロールパネルを表示( 0 );
// プロット変更レポート
gbb = レポート(gb)[グラフビルダーボックス(1)];
// 線形回帰を追加
gbb << 要素を追加( 1, 1, {タイプ( "適合線" ), X, Y, 適合の信頼度( 0 ),方程式( 0 )} );
// Y軸を設定
minval = min(:Result[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name | :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)])*0.95;
maxval = max(:Result[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name| :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)])*1.05;
maxvalts = max(:Time Point Months[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name| :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)])*1.05;
gbb[軸ボックス(1)] << 最小(-0.1);
gbb[AxisBox(1)] << max(maxvalts);
gbb[AxisBox(2)] << min(minval);
gbb[AxisBox(2)] << max(maxval);
gbb[AxisBox(2)] << inc((maxval-minval)/10);
// Y軸ラベルを設定する
unitList = 連想配列( :Result Unit[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name | :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)] ) << Remove( "" ) << Get Keys;
N 個のアイテム(ユニットリスト) == 1 の場合、
gbb[テキスト編集ボックス( 4 )] << テキストを設定( numPar[i] || " [" || unitList[1] || "]" )
);
N 個のアイテム(ユニットリスト) != 1 の場合、
gbb[テキスト編集ボックス( 4 )] << テキストを設定( numPar[i] )
);
// グラフのタイトルを設定する
gbb[テキスト編集ボックス( 1 )] << テキストを設定( numPar[i] || " vs. タイムポイント ");
// 追加
//gbba = レポート( gbb );
col2 << 追加( gbb );
//フィルター << 閉じる;
gb << ウィンドウを閉じる;
// 2番目のプロットを開始
gb2 = グラフビルダー(
//見えない、
サイズ(700, 400)、
変数( X( 時点月数 ), Y( : 差 ), 色( : バッチ ) ),
要素(ポイント(X,Y))
);
gb2 << ローカル データ フィルター(invisible、フィルターの追加( columns( :Component、 :Batch、 :Source Table )、 Where( :Component == numPar[i] )、 Where( :Batch == cyc[k])、 Where( :Source Table == dt5_name)));
dt4 << 選択をクリア();
// グラフからフィルタ表示を削除します
gb2 << コントロールパネルを表示( 0 );
// プロット変更レポート
gbb2 = レポート(gb2)[グラフビルダーボックス(1)];
gbb2 << 要素を追加します( 1, 1, {Type( "Line" ), X, Y} );
// HC値を取得する
l_idx = dt4 << 行を取得します where(dt4:Component == numPar[i] & :Batch == cyc[k]);
ul = min(dt4:HC[l_idx]);
if(Ismissing(ul),
if(min(:Difference[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)]) == 0,
最小値 = -5;
最大値 = 5、
minval = min(:Difference[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)])*0.95;
maxval = max(:Difference[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)])*1.05;
)、
minval = min(:Difference[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)],-ul)*1.05;
maxval = max(:Difference[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)], ul)*1.05;
);
if(!ismissing(ul), //HC値がない場合は制限線を作成しない
gbb2[AxisBox(2)] << Add Ref Line(ul,"solid", black, char(round(ul,2)));
gbb2[AxisBox(2)] << Add Ref Line(-ul,"solid", black, char(round(-ul,2)));
);
gbb2[AxisBox(2)] << Ref Line(0,"Dashed")を追加;
gbb2[AxisBox(2)] << min(minval);
gbb2[AxisBox(2)] << max(maxval);
gbb2[AxisBox(2)] << inc((maxval-minval)/10);
//追加
//gbba2 = レポート(gbb2);
col3 << 追加( gbba2 );
//フィルター << 閉じる;
gb2 << ウィンドウを閉じる;
);
);
//);
tab = タブページボックス(numPar[i],
V リストボックス(
列1
H リストボックス(col2,col3) // 2つのプロットを隣り合わせに配置する
)
);
タブ << Title(numPar[i]);
//gb << title(Char(1));
gb_collector << 追加(タブ);
);
gb_collector << ドッキング可能( 1 );
gb_collector << オーバーフローを有効にする(1);
nw = 新しいウィンドウ("マイダッシュボード",
gb_collector
);
どうすればいいか教えていただけますか?
インタラクティブプロットについて一歩下がって、何を望んでいるのかを説明する必要があります。最良の方法は、サンプル データを提供するか、JMP のサンプル データセットの 1 つを使用して、できるだけ小さな例で何を望んでいるのかを説明することです。
インタラクティブプロットについてNames Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = Tab Box("Dashboard");
For(i = 1, i <= 20, i++,
// Column box for plot of all batches
col1 = Col Box("All Batches" || Char(i));
// Create the first Graph Builder plot
gb = Expr(
dt << Graph Builder(
invisible,
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
);
col1 << Append(gb);
// Create a column box for the two Graph Builder plots
col2 = Col Box("Actual Data " || Char(i));
// Create and append two Graph Builder plots to col2
For(j = 1, j <= 2, j++,
gbb = Expr(
dt << Graph Builder(
invisible,
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
);
col2 << Append(gbb);
);
// Create a tab for col1 and col2 and append it to gb_collector
tab = Tab Page Box(
" Something Something ",
V List Box(
col1,
H List Box(col2) // Placing the two plots next to each other
)
);
gb_collector << Append(tab);
// Set title for gb
gb << title("Title");
);
gb_collector << Dockable(1);
gb_collector << Set Overflow Enabled(1);
nw = New Window("Dashboard", gb_collector);
Here is the example that i use and i am trying to follow the same structure in my own script.インタラクティブプロットについて現在のデータテーブル(dt);
dt << 新しい列("時点の月数", 数式(Round(:時点の日数/30.438), 2));
gb_collector = タブボックス();
i = 1, i <= N 項目(numPar)の場合、i++、
// すべてのバッチのプロットの列ボックス
col1 = コルボックス( "" );
// 実際のデータのプロット用の列ボックス
col2 = コルボックス( "" );
// 差のプロットの列ボックス
col3 = コルボックス( "" );
//tab = タブページボックス("",
gb = dt << グラフビルダー(
//見えない、
サイズ(700, 400)、
変数(X(:時点月数), Y(:結果), オーバーレイ(:バッチ)),
要素(ポイント(X, Y))
);
// ローカル フィルター: 参照を持つ cyc 内のバッチのみにバッチを設定し、他のすべてのバッチには設定しません。
gb << ローカルデータフィルター(
見えない、
フィルターの追加(列(:コンポーネント、:バッチ、:ソーステーブル)、
ここで(:Component == numPar[i])、
ここで(:バッチ == {cyc, bat})、
Where(:ソーステーブル == dt_name)
)
);
dt << Clear Select();
// グラフからフィルタ表示を削除します
gb << コントロールパネルを表示(0);
// プロット変更レポート
gbb = レポート(gb)[グラフビルダーボックス(1)];
// 線形回帰を追加
gbb << Add Element(1, 1, {Type("Line Of Fit"), X, Y, Confidence of Fit(0), Equation(0)});
// Y軸を設定
minval = min(:Result[dt << get rows where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 0.95;
maxval = max(:Result[dt << get rows where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 1.05;
maxvalts = max(:Time Point Months[dt << get rows where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 1.05;
gbb[軸ボックス(1)] << 最小(-0.1);
gbb[AxisBox(1)] << max(maxvalts);
gbb[AxisBox(2)] << min(minval);
gbb[AxisBox(2)] << max(maxval);
gbb[AxisBox(2)] << inc((最大値 - 最小値) / 10);
// Y軸ラベルを設定する
unitList = 連想配列(:Result Unit[dt << get rows where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) << Remove("") << Get Keys;
N 個のアイテム(ユニットリスト) == 1 の場合、
gbb[テキスト編集ボックス(4)] << Set text(numPar[i] || " [" || unitList[1] || "]")
,
gbb[テキスト編集ボックス(4)] << テキストを設定(numPar[i])
);
// グラフのタイトルを設定する
gbb[テキスト編集ボックス(1)] << Set text(numPar[i] || " vs. Time Point");
// 追加
//gbba = レポート(gb)、
col1 << 追加(gb);
//フィルター << 閉じる;
gb << ウィンドウを閉じる;
// パラメータのループ内でバッチもループするようになりました
k = 1, k <= N 項目( cyc ), k++,
check = dt << 行を取得 where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name | :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name);
if(N items(check) > 0, // 現在のバッチにパラメータが存在するかどうかを確認するチェックを作成します
// ベースプロットを作成
gb = グラフビルダー(
//見えない、
サイズ(700, 400)、
変数( X( :時点の月数 ), Y( :結果 ), オーバーレイ( :バッチ ) ),
要素(ポイント(X,Y)、)
);
gb << ローカル データ フィルター(invisible、フィルターの追加( columns( :Component、 :Batch、 :Source Table )、 Where( :Component == numPar[i] )、 Where( :Batch == {cyc[k]、 bat[k]})、 Where( :Source Table == dt_name) ));
dt << Clear Select();
// グラフからフィルタ表示を削除します
gb << コントロールパネルを表示( 0 );
// プロット変更レポート
gbb = レポート(gb)[グラフビルダーボックス(1)];
// 線形回帰を追加
gbb << 要素を追加( 1, 1, {タイプ( "適合線" ), X, Y, 適合の信頼度( 0 ),方程式( 0 )} );
// Y軸を設定
minval = min(:Result[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name | :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)])*0.95;
maxval = max(:Result[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name| :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)])*1.05;
maxvalts = max(:Time Point Months[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name| :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)])*1.05;
gbb[軸ボックス(1)] << 最小(-0.1);
gbb[AxisBox(1)] << max(maxvalts);
gbb[AxisBox(2)] << min(minval);
gbb[AxisBox(2)] << max(maxval);
gbb[AxisBox(2)] << inc((maxval-minval)/10);
// Y軸ラベルを設定する
unitList = 連想配列( :Result Unit[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name | :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)] ) << Remove( "" ) << Get Keys;
N 個のアイテム(ユニットリスト) == 1 の場合、
gbb[テキスト編集ボックス( 4 )] << テキストを設定( numPar[i] || " [" || unitList[1] || "]" )
);
N 個のアイテム(ユニットリスト) != 1 の場合、
gbb[テキスト編集ボックス( 4 )] << テキストを設定( numPar[i] )
);
// グラフのタイトルを設定する
gbb[テキスト編集ボックス( 1 )] << テキストを設定( numPar[i] || " vs. タイムポイント ");
// 追加
//gbba = レポート( gbb );
col2 << 追加( gbb );
//フィルター << 閉じる;
gb << ウィンドウを閉じる;
// 2番目のプロットを開始
gb2 = グラフビルダー(
//見えない、
サイズ(700, 400)、
変数(X(時点月数)、Y(:差)、色(:バッチ))、
要素(ポイント(X,Y))
);
gb2 << ローカル データ フィルター(invisible、フィルターの追加( columns( :Component、 :Batch、 :Source Table )、 Where( :Component == numPar[i] )、 Where( :Batch == cyc[k])、 Where( :Source Table == dt5_name)));
dt4 << 選択をクリア();
// グラフからフィルタ表示を削除します
gb2 << コントロールパネルを表示( 0 );
// プロット変更レポート
gbb2 = レポート(gb2)[グラフビルダーボックス(1)];
gbb2 << 要素を追加します( 1, 1, {Type( "Line" ), X, Y} );
// HC値を取得する
l_idx = dt4 << 行を取得します where(dt4:Component == numPar[i] & :Batch == cyc[k]);
ul = min(dt4:HC[l_idx]);
if(Ismissing(ul),
if(min(:Difference[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)]) == 0,
最小値 = -5;
最大値 = 5、
minval = min(:Difference[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)])*0.95;
maxval = max(:Difference[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)])*1.05;
)、
minval = min(:Difference[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)],-ul)*1.05;
maxval = max(:Difference[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)], ul)*1.05;
);
if(!ismissing(ul), //HC値がない場合は制限線を作成しない
gbb2[AxisBox(2)] << Add Ref Line(ul,"solid", black, char(round(ul,2)));
gbb2[AxisBox(2)] << Add Ref Line(-ul,"solid", black, char(round(-ul,2)));
);
gbb2[AxisBox(2)] << Ref Line(0,"Dashed")を追加;
gbb2[AxisBox(2)] << min(minval);
gbb2[AxisBox(2)] << max(maxval);
gbb2[AxisBox(2)] << inc((maxval-minval)/10);
//追加
//gbba2 = レポート(gbb2);
col3 << 追加( gbba2 );
//フィルター << 閉じる;
gb2 << ウィンドウを閉じる;
);
);
//);
tab = タブページボックス(numPar[i],
V リストボックス(
列1
H リストボックス(col2,col3) // 2つのプロットを隣り合わせに配置する
)
);
タブ << Title(numPar[i]);
//gb << title(Char(1));
gb_collector << 追加(タブ);
);
gb_collector << ドッキング可能( 1 );
gb_collector << オーバーフローを有効にする(1);
nw = 新しいウィンドウ("マイダッシュボード",
gb_collector
);
これが私のスクリプトです。
添付されているのは、8 つのグラフを含む現在のダッシュボードのスクリーンショットです。これらのグラフを整理するための具体的な要件は次のとおりです。
- 最初のグラフを保持する: 最初のグラフをそのまま保持したいと思います。
- 2 番目のグラフを削除します。 2 番目のグラフはダッシュボードから削除する必要があります。
- 最後の 6 つのグラフをペアにする: 最後の 6 つのグラフは、各ペアが横に並んで表示されるようにペアにする必要があります。具体的には、グラフは次のように構成する必要があります。
- 3 番目と 4 番目のグラフは隣り合って表示する必要があります。
- 5番目と6番目のグラフは隣り合って表示する必要があります。
- 7番目と8番目のグラフは隣り合って表示する必要があります。
要約すると、最終的なレイアウトでは、最初のグラフの後に 3 組のグラフが続き、各グラフが並べて表示されます。
インタラクティブプロットについてこれら 2 つのスクリプトはまったく異なります (また、JSL コードには JSL フォーマットを使用してください。読みやすくなります)。Col Box を何に使用していますか? 何をループしていますか (i と j)? 各グラフに含まれる情報は何によって決まりますか? それらは相互に対話する必要がありますか?