複数の列と行を持つデータテーブルがあります
各列をループして、x軸のグラフビルダーに追加したい
これは私の簡単なスクリプトです
dt = Open( filepath );
all_cols = dt << Get Column Names( "String" );
cols_to_plot={};
For Each ({col}, all_cols,
If(col == "A" || col == "B",,
Insert into (cols_to_plot, col);
)
);
graph = dt << Graph Builder();
For Each ({col},cols_to_plot,
graph << Add Variable ("X", Column(dt, col)); // Also tried graph << Add Variable (X, Column(dt, col));
);
このスクリプトは常に以下のエラーを表示します
'変数の追加' のアクセスまたは評価で引数値が無効です。不正な引数 ("X")、変数の追加 ("X", 列 (dt, col)) /*###*/ 600 行目
確認のため、以下のスクリプトを実行すると正常に動作しますが、約1000列にプロットしたいです。
graph = dt << Graph Builder(
Variables(X(cols_to_plot[1]),X(cols_to_plot[2]),X(cols_to_plot[3]));
);
何が足りないのでしょうか?ご協力ありがとうございます
編集 (jthi): jsl フォーマットを追加しました
どのような種類のプロットを狙っているのか正確には分かりませんが、一例としては次のようなものになります
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
cols_to_plot = {"age", "sex"};
graph = dt << Graph Builder();
For Each ({col},cols_to_plot,
Eval(EvalExpr(
graph << Add Variable({Expr(NameExpr(AsColumn(dt, col))), Role("X")});
));
);
スクリプト インデックスから << 変数を追加 の正しい構文を確認し、式の評価を使用して正しい形式で列参照を取得します。

(最終的なプロットに応じて、グラフ ビルダー式全体を構築する別の方法を使用する必要がある場合があります)
私はこの方法を試し、また試しました
For Each ({col}, cols_to_plot,
col_ref = Column(dt, col);
graph << Add variable (col_ref, Role("X"));
);
どちらの場合も、jsl がハングします。データ テーブルには 1000 列と 500 行しかありません。
これは効率的な方法でしょうか、それともテーブルのすべての列をX軸に一度にプロットするより良い方法があるでしょうか。GUIで同じことを試せば、はるかに速くなります。
どのようなタイプのプロットを作成しようとしていますか?
X軸上のすべての列を連続して表示する単純な散布図を作成しようとしています
以下のようなもの

列数が多いため、列を一つずつ追加するのではなく、グラフビルダー式を作成する方が適切でしょう。グラフを手動で作成し、スクリプトをコピーして構築方法を確認し、JSLを使用して再現してください。以下に例を示します。
JMPが作成したスクリプト
Graph Builder(
Size(528, 458),
Show Control Panel(0),
Variables(
X(:"0.642539"n, Combine("Parallel Merged")),
X(:"0.645736349"n, Position(1), Combine("Parallel Merged")),
X(:"0.648933698"n, Position(1), Combine("Parallel Merged")),
X(:"0.652131047"n, Position(1), Combine("Parallel Merged")),
X(:"0.655328396"n, Position(1), Combine("Parallel Merged")),
X(:"0.658525745"n, Position(1), Combine("Parallel Merged")),
X(:"0.661723094"n, Position(1), Combine("Parallel Merged")),
X(:"0.664920443"n, Position(1), Combine("Parallel Merged")),
X(:"0.668117792"n, Position(1), Combine("Parallel Merged")),
X(:"0.671315141"n, Position(1), Combine("Parallel Merged")),
X(:"0.67451249"n, Position(1), Combine("Parallel Merged")),
X(:"0.677709839"n, Position(1), Combine("Parallel Merged")),
X(:"0.680907188"n, Position(1), Combine("Parallel Merged")),
X(:"0.684104537"n, Position(1), Combine("Parallel Merged")),
X(:"0.687301886"n, Position(1), Combine("Parallel Merged")),
X(:"0.690499235"n, Position(1), Combine("Parallel Merged"))
),
Elements(Points(X(1), X(2), X(3), X(4), X(5), X(6), X(7), X(8), X(9), X(10), X(11), X(12), X(13), X(14), X(15), X(16), Legend(4)))
);
JSLでこれを作成するには次のようにします
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Functional Data/NMR DoE.jmp");
nrmcols = dt << get column group("NMR Spectra");
colnames = Transform Each({col}, nrmcols,
AsColumn(dt, col) << get name;
);
colnames = colnames[1::20];
var_expr = Expr(Variables());
points_expr = Expr(Points());
For Each({colname, idx}, colnames,
x_expr = EvalExpr(X(Expr(NameExpr(AsColumn(dt, colname))), Position(1), Combine("Parallel Merged")));
point_expr = EvalExpr(X(Expr(idx)));
Insert Into(var_expr, Name Expr(x_expr));
Insert Into(points_expr, Name Expr(point_expr));
);
gb = Eval(Substitute(
Expr(dt << Graph Builder(
Size(528, 458),
Show Control Panel(0),
_var_,
Elements(_points_)
)),
Expr(_var_), Name Expr(var_expr),
Expr(_points_), Name Expr(points_expr)
));
Write();
これは完璧に動作します。ご協力ありがとうございます
こんにちは、
私がプロットしたこれらのグラフには、.jmpreport、.jrpなどを試したどの形式でも保存できないという問題があります。静的なpng、jpg形式でグラフを保存したくないので、データが埋め込まれたインタラクティブなグラフを保存したいのです。
nw = New Window("printing window",
gb = Eval(Substitute(
Expr(dt << Graph Builder(
Show Window(1),
Size(528, 458),
Show Control Panel(0),
_var_,
Elements(_points_)
)),
Expr(_var_), Name Expr(var_expr),
Expr(_points_), Name Expr(points_expr)
));
); <BR /><BR />reportpath = ::my_dir_path||"/metadata/"||metaTestfile;
newWindow<< Save(reportpath); Also tried
gb = Eval(Substitute(
Expr(dt << Graph Builder(
Show Window(1),
Size(528, 458),
Show Control Panel(0),
_var_,
Elements(_points_)
)),
Expr(_var_), Name Expr(var_expr),
Expr(_points_), Name Expr(points_expr)
));
gb << Show Window;
newWindow = Window (gb);
reportpath = ::my_dir_path||"/metadata/"||metaTestfile;
newWindow<< Save(reportpath );
The script doesn't throw any error in any case but also not saving the graph
スクリプトインデックスには通常、スクリプトに関する回答が掲載されています(<< ウィンドウレポートを保存)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Functional Data/NMR DoE.jmp");
nrmcols = dt << get column group("NMR Spectra");
colnames = Transform Each({col}, nrmcols,
AsColumn(dt, col) << get name;
);
colnames = colnames[1::20];
var_expr = Expr(Variables());
points_expr = Expr(Points());
For Each({colname, idx}, colnames,
x_expr = EvalExpr(X(Expr(NameExpr(AsColumn(dt, colname))), Position(1), Combine("Parallel Merged")));
point_expr = EvalExpr(X(Expr(idx)));
Insert Into(var_expr, Name Expr(x_expr));
Insert Into(points_expr, Name Expr(point_expr));
);
gb = Eval(Substitute(
Expr(dt << Graph Builder(
Size(528, 458),
Show Control Panel(0),
_var_,
Elements(_points_)
)),
Expr(_var_), Name Expr(var_expr),
Expr(_points_), Name Expr(points_expr)
));
gb << Save Window Report("$DOWNLOADS/test.jrp", embed data(1));
// demo purposes
Close(dt, no save);
wait(1);
Open("$DOWNLOADS/test.jrp");
Write();