我有一個包含多列和多行的資料表
我想遍歷每一列,並將其新增到圖表產生器的 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();