如何使用 JSL 动态添加图形元素语句大家好,我对 JMP 和 JSL 还不太熟悉,但对编程比较熟悉。我正在尝试创建一个 JSL 脚本,该脚本会获取一个参数名称列表(我在“PlotVars”数组中定义),然后将它们绘制在同一张图表上的不同图形中。我希望无论这个数组中定义了多少个参数,这个脚本都能正常工作(以防每次使用时我需要添加或减少参数)。我可以使用下面的代码来实现这个功能,但所有图形都默认使用点,我希望它们使用线。我的理解是为每个位置使用多个元素语句。我认为问题出在第二行,也就是我初始化“var_line”变量的地方。如果我将其初始化为 Expr(),它会生成元素语句,但无法正确运行它们。如果我将它们初始化为 Parse(),情况也一样。欢迎大家提出任何解决这个问题的建议。我使用的是 JMP 18。
编辑(jthi):添加了 jsl 格式
var_expr = Expr(
Variables(X(As Column("Start Alignment of " || DataSet_1)))
);
var_line = Expr();//Unable to dymanically add elements to the graph. still unsure why
For(i = 1, i <= N Items(PlotVars), i++,
Insert Into(var_expr, Eval Expr(Y(As Column(PlotVars[Expr(i)] || " of " || DataSet_1), )));
Insert Into(
var_expr,
Eval Expr(Y(As Column(PlotVars[Expr(i)] || " of " || DataSet_2), Position(Expr(i)), ))
);
Insert Into(
var_line,
Eval Expr(Elements(Position(1, Expr(i)), Line(X, Y(1), Y(2)), Legend(4)))
);
);
plot = Substitute(
Expr(
Data Table("Comparison of" || DataSet_1 || "with" || DataSet_2) <<
Graph Builder(Size(809, 629), Show Control Panel(0), vvv, yyy)
),
Expr(vvv), Name Expr(var_expr),
Expr(yyy), Name Expr(test)
);
Eval(plot);
<
var_expr = Expr(变量(X(作为列("开始对齐" || DataSet_1) )));
var_line = Expr();//无法动态地向图形中添加元素。仍然不确定为什么
对于(i=1,i<=N 个项目(PlotVars),i++,
插入(var_expr,Eval Expr(Y(作为列(PlotVars[expr(i)] || " of " || DataSet_1),)));
插入(var_expr,Eval Expr(Y(作为列(PlotVars[expr(i)] || " of " || DataSet_2),位置(expr(i)),)));
插入(var_line,Eval Expr(元素(位置(1,expr(i)),线(X,Y(1),Y(2)),图例(4))));
);
图 = 替代(
表达式(
数据表(“比较”|| DataSet_1 ||“与”|| DataSet_2)<<
图形生成器(
尺寸(809,629),
显示控制面板(0),
旅游局,
年
)),
Expr(vvv), 名称 Expr(var_expr),
Expr(yyy),名称 Expr(测试)
);
评估(情节);
>
自动化和脚本回复:如何使用 JSL 为图形动态添加元素语句您希望图表看起来是什么样的?JMP 创建的脚本是什么样的?它与您使用 JSL 创建的脚本相比如何?
Data Table("Comparison of" || DataSet_1 || "with" || DataSet_2) <<
Graph Builder(
Size(809, 629),
Show Control Panel(0),
Variables(
X(As Column("Start Alignment of " || DataSet_1)),
Y(As Column(PlotVars[1] || " of " || DataSet_1)),
Y(As Column(PlotVars[1] || " of " || DataSet_2), Position(1)),
Y(As Column(PlotVars[2] || " of " || DataSet_1)),
Y(As Column(PlotVars[2] || " of " || DataSet_2), Position(2))
),
test
)
关于动态构建图形生成器,还有很多相关资料。以下是一些Scripters Club 的录音:图形生成器中的 JSL以及回复所有人:如何为图形生成器编写动态内容脚本
回复:如何使用 JSL 为图形动态添加元素语句该脚本创建的图形与我期望的完全一致,只不过它在元素语句中使用了点/平滑器来创建图形(请注意,为了缩短脚本长度,我们删除了一些变量)。以下是脚本输出的图形代码:
Graph Builder(
Size( 809, 629 ),
Show Control Panel( 0 ),
Variables(
...
)
),
Elements(
Position( 1, 1 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 1 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 2 ) )
),
Elements(
Position( 1, 2 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 3 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 4 ) )
),
Elements(
Position( 1, 3 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 5 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 6 ) )
),
Elements(
Position( 1, 4 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 7 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 8 ) )
),
Elements(
Position( 1, 5 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 9 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 10 ) )
)
);
我更希望使用 Lines 来代替:
Graph Builder(
Size( 696, 590 ),
Show Control Panel( 0 ),
Variables(
...
)
),
Elements( Position( 1, 1 ), Line( X, Y( 1 ), Y( 2 ), Legend( 11 ) ) ),
Elements( Position( 1, 2 ), Line( X, Y( 1 ), Y( 2 ), Legend( 12 ) ) ),
Elements( Position( 1, 3 ), Line( X, Y( 1 ), Y( 2 ), Legend( 13 ) ) ),
Elements( Position( 1, 4 ), Line( X, Y( 1 ), Y( 2 ), Legend( 14 ) ) ),
Elements( Position( 1, 5 ), Line( X, Y( 1 ), Y( 2 ), Legend( 15 ) ) )
);
每当尝试“插入”元素语句时,它只会添加一个嵌套的元素语句,而不是单独的元素语句。而且图形生成器似乎会忽略这些嵌套的元素语句。
回复:如何使用 JSL 为图形动态添加元素语句
查看更多...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
plotvars = {"NPN1", "NPN2", "NPN3", "NPN4", "PNP1"};
xcol = "wafer";
gb_expr = Expr(Graph Builder(Size(809, 629), Show Control Panel(0)));
var_expr = EvalExpr(Variables(X(Expr(NameExpr(As Column(dt, xcol))))));
For Each({colname, idx}, plotvars,
Insert Into(var_expr, Eval Expr(Y(Expr(NameExpr(As Column(dt, colname))))));
);
Insert Into(gb_expr, Name Expr(var_expr));
For(idx = 1, idx <= N Items(plotvars), idx++,
elem_expr = Substitute(
Expr(Elements(Position(1, _pos_), Line(X, Y, Legend(_lgnd_)))),
Expr(_pos_), idx,
Expr(_lgnd_), idx
);
Insert Into(gb_expr, Name Expr(elem_expr));
);
// Show(gb_expr);
gb = Eval(EvalExpr((Send(dt, Expr(gb_expr)))));
gb_expr = Graph Builder(
Size(809, 629),
Show Control Panel(0),
Variables(X(:wafer), Y(:NPN1), Y(:NPN2), Y(:NPN3), Y(:NPN4), Y(:PNP1)),
Elements(Position(1, 1), Line(X, Y, Legend(1))),
Elements(Position(1, 2), Line(X, Y, Legend(2))),
Elements(Position(1, 3), Line(X, Y, Legend(3))),
Elements(Position(1, 4), Line(X, Y, Legend(4))),
Elements(Position(1, 5), Line(X, Y, Legend(5)))
);
回复:如何使用 JSL 为图形动态添加元素语句太棒了,这个想法奏效了。我只需要在图形生成器级别插入“元素”命令,而不是尝试将元素命令单独构建成一个表达式。