如何从 JSL 中的列表传递 Graph Builder 中的 Y 变量?下面的示例脚本满足了我想要在 Y 轴上绘制的固定少量参数的需要。
如何自动执行上面提供给 Y 的列表?
(X 变量/列保持固定,但进入 Y 的元素数量可以更改,并且由另一个脚本提供)
Names Default To Here (1);
Clear Log ();
dt = open("$sample_data\Big Class.jmp");
y_values = {"name", "age", "sex", "weight"};
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height),
Y( column(dt, y_values[1]) ),
Y( column(dt, y_values[2]) ),
Y( column(dt, y_values[3]) ),
Y( column(dt, y_values[4]) )
),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 1 ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 2 ) ) ),
Elements( Position( 1, 3 ), Points( X, Y, Legend( 3 ) ) ),
Elements( Position( 1, 4 ), Points( X, Y, Legend( 4 ) ) )
);另外,在这种情况下如何处理 Elements()。
自动化和脚本编写视窗回复:如何从 JSL 中的列表传递 Graph Builder 中的 Y 变量?@hogi谢谢,恐怕我需要更多的指导,因为我以前从未使用过 Expr () 和 Insert NameExpr () 函数。 如果您可以提供一个带有我在 OP 中添加的示例脚本的示例,那将会很有用。
回复:如何从 JSL 中的列表传递 Graph Builder 中的 Y 变量?这不仅是构建这个的选项,而且可以提供一些想法。 还可以搜索 GraphBuilderbox 的变量和元素的脚本索引
Names Default To Here(1);
dt = Open("$sample_data\Big Class.jmp");
y_values = {"name", "age", "sex", "weight"};
variables_expr = Expr(Variables(X(:height)));
For Each({y_col}, y_values,
temp_expr = Expr(Y());
Insert Into(temp_expr, Name Expr(AsColumn(dt, y_col)));
Insert Into(variables_expr, Name Expr(temp_expr));
);
gb_expr = Expr(Graph Builder(
Show Control Panel(0)
));
Insert Into(gb_expr, Name Expr(variables_expr));
For Each({y_col, idx}, y_values,
Eval(EvalExpr(
Insert Into(gb_expr,
Name Expr(Elements(Position(1, Expr(idx)), Points(X, Y, Legend(Expr(idx)))))
)
));
);
Show(Name Expr(gb_expr));
Eval(gb_expr);
编辑:
使用 Add Variable() 的一个示例
Names Default To Here(1);
dt = Open("$sample_data\Big Class.jmp");
y_values = {"name", "age", "sex", "weight"};
variables_expr = Expr(Variables(X(:height)));
gb = dt << Graph Builder(
// Ignore Platform Preferences(1),
Show control Panel(0),
Variables(X(:height))
);
gb << inval;
For Each({y_col, idx}, y_values,
Eval(EvalExpr(
gb << Add Variable({Expr(Name Expr(As Column(dt, y_col))), Role("Y")})
));
// if you just want points, you shouldn't need this, but smoother idx is 2 instead of 1
/* gb << Remove Element(1, idx, 1);
Eval(EvalExpr(
gb << Add Element(1, Expr(idx), {Type("Points"), X, Y, Legend(Expr(idx))})
));
*/
);
gb << Update window;
gb << Remove Element(1, N Items(y_values), 2); // 1 or 2 for smoother idx, depending on how GB is built回复:如何从 JSL 中的列表传递 Graph Builder 中的 Y 变量?@jthi谢谢。 这对我有用,但我无法更改默认的图表标题。 如何通过 JSL 执行此操作?
回复:如何从 JSL 中的列表传递 Graph Builder 中的 Y 变量?取决于您定义的标题。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y), Smoother(X, Y))
);
gb << Title("Test");
如果您认为它是图形生成器上方的文本编辑框,请手动更改它,然后修改 JMP 创建的脚本。
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("asdsad")}))
如果您有 JMP17 并使用属性,您可以获得更多信息

所以像
Report(gb)[TextEditBox(1)] << Set Text("12313213");
可能会起作用,具体取决于您的报告
回复:如何从 JSL 中的列表传递 Graph Builder 中的 Y 变量?@jthi谢谢。 对于您展示的简单案例,我知道如何放置图表标题(如您所示),但是对于下面的案例如何做到这一点?
Names Default To Here(1);
dt = Open("$sample_data\Big Class.jmp");
y_values = {"name", "age", "sex", "weight"};
variables_expr = Expr(Variables(X(:height)));
For Each({y_col}, y_values,
temp_expr = Expr(Y());
Insert Into(temp_expr, Name Expr(AsColumn(dt, y_col)));
Insert Into(variables_expr, Name Expr(temp_expr));
);
gb_expr = Expr(Graph Builder(
Show Control Panel(0)
));
Insert Into(gb_expr, Name Expr(variables_expr));
For Each({y_col, idx}, y_values,
Eval(EvalExpr(
Insert Into(gb_expr,
Name Expr(Elements(Position(1, Expr(idx)), Points(X, Y, Legend(Expr(idx)))))
)
));
);
Show(Name Expr(gb_expr));
Eval(gb_expr);回复:如何从 JSL 中的列表传递 Graph Builder 中的 Y 变量?参考图形生成器,这两个想法都应该可行
回复:如何从 JSL 中的列表传递 Graph Builder 中的 Y 变量?@jthi谢谢,但在脚本索引中没有看到 Get Reference ()(我使用的是 JMP 16.2.0)。 您的意思是获取图形生成器窗口的窗口名称吗?
回复:如何从 JSL 中的列表传递 Graph Builder 中的 Y 变量?Current Report()[TextEditBox( 1 )] << set text( "NewTitle" );
这对我有用。
回复:如何从 JSL 中的列表传递 Graph Builder 中的 Y 变量?我建议您在评估创建图表的表达式时获取参考。 我认为
gb = Eval(gb_expr);
应该管用。 此外,如果有可能打开多个表,那么确保使用 dt 创建图形生成器可能是个好主意。 尽管我不确定在这种情况下无需测试最简单的语法是什么
回复:如何从 JSL 中的列表传递 Graph Builder 中的 Y 变量?您可以为表达式生成符号 var 和 gb
Var= Expr(variables(x(:height)))
gb =Expr(Graph Builder())
然后使用插入在一个为了循环用 Ys 填充 var ,然后插入名称表达式(var)进入国标然后使用另一个为了循环添加 Elements 表达式。