JSL:如何使用组合框和 Next/Prev 按钮编写图形更新脚本大家好,
我正在处理一组更大的 JSL 代码,并有兴趣向其中添加一些功能,以便用户可以循环浏览不同的视图——就像循环浏览 PCA 平台中的不同组件时可以做的事情,请参阅屏幕下面拍摄。

我知道我需要几个组合框,其中包含数据表中的相关列,但我不确定如何让图形像 PCA 平台一样自动更新,或者如何正确调用 Next 按钮框。 我还想添加上一个按钮框,以便用户可以更轻松地退回到视图中。
如果有人对如何实现这一点有一些建议或想法,我将不胜感激。 我没有成功搜索此功能,也没有在我拥有的 Scripting Index 或 Scripting Guide 中找到更多相关信息。
谢谢!,
DS
更新:我越来越接近并且有一个循环通过组合框中的列表的代码,所以这非常简单(见下文)。 我仍然遇到的问题是让图表自动更新。 意图是当用户单击 Next 或 Prev 时,y 变量在图中自动更改。 顺便说一句,我正在使用 Boston Housing.jmp 文件对其进行测试。
Names Default To Here( 1 );
dt = Data Table( "Boston Housing" );
xlist = dt << Get Column Names( String );
nw = New Window( "interactive Graph builder", V List Box( vlb1 = V List Box(), vlb2 = V List Box() ) );
xcol = 1;
ycol = 2;
lbcontent = V List Box(
Lineup Box( N Col( 5 ),
Text Box( "Select Params", <<SET font="" size=""></SET>
脚本回复:JSL:如何使用组合框和 Next/Prev 按钮编写图形更新脚本嗨,我正在寻找一些进一步的帮助?
我试图在我的 xlist 上只显示一定数量的列,而不是所有列,这些列以任意随机顺序放置
xlist= {"crim", "nox", "radial"};
使用上面的脚本,它只绘制前 3 列,在这种情况下是“crim”、“zn”和“indus”,而不是我上面提到的那些。
有什么解决方法吗?
谢谢。
回复:JSL:如何使用组合框和 Next/Prev 按钮编写图形更新脚本更新:好的,所以我需要在我的 Scripting Guide 中多阅读一些关于 Append、Prepend、Sib Append 和 Sib Prepend 的内容。 在阅读完此内容后,问题是确定我需要将更新的图形添加到哪个容器框。 因此,当涉及在窗口中包含其他容器框时,您可能需要使用 Sib Prepend() 命令。 现在我看到它是有道理的。
如果有人感兴趣,附加的 JSL 会按照我的意图完成。
谢谢!,
DS
回复:JSL:如何使用组合框和 Next/Prev 按钮编写图形更新脚本你好@ian_jmp ,
当我在新窗口中有更多元素时,我希望您能够帮助正确地使该脚本正常工作。 我已经能够将我的独立运行的概念脚本转移到一个更大的脚本中,该脚本对数据进行分区并显示结果。 我将我的 JSL 代码附加为文件,这样可能更容易。 它会打开 Boston Housing,您可以选择数据表,然后选择 X 因子和 Y 响应,并设置验证部分和要尝试的最大拆分数。
该代码可以生成我想要的输出(如下):

但是,当您循环查看参数时,它会将窗口的布局重新排列为:

我想保持与第一个屏幕截图相同的布局,但 Prepend 和 Append 选项没有保持正确的布局。 任何帮助深表感谢。
谢谢!,
DS
回复:JSL:如何使用组合框和 Next/Prev 按钮编写图形更新脚本你好@ian_jmp ,
这正是诀窍,谢谢! 我将在下面发布工作代码并将其标记为解决方案,因为这段代码完全符合我开始处理这部分工作时的意图。
谢谢!,
DS
使用 Prepend 而不是 Append 更新了代码。
Names Default To Here( 1 );
dt = Open("$sample_data/Boston housing.jmp");
//dt = Data Table( "Boston Housing" );
xlist = dt << Get Column Names( String );
gb_default = Expr(
Graph builder( Show Control Panel( 0 ), Variables( X( Column( dt, 1 ) ), Y( Column( dt, 2 ) ) ), Elements( Points( X, Y, Legend( 3 ) ) ) )
);
gb_change = Expr(
Graph builder( Show Control Panel( 0 ), Variables( X( Column( dt, xcol ) ), Y( Column( dt, ycol ) ) ), Elements( Points( X, Y, Legend( 3 ) ) ) )
);
nw = New Window( "Interactive Graph",
gb = gb_default;
lbcontent = Lineup Box( N Col( 5 ),
Spacer Box( Size( 1, 0 ) ),
Text Box( "X", <<JUSTIFY text=""></JUSTIFY>回复:JSL:如何使用组合框和 Next/Prev 按钮编写图形更新脚本尝试“前置”而不是“附加”。
回复:JSL:如何使用组合框和 Next/Prev 按钮编写图形更新脚本大家好,
所以,我能够找到以前的讨论线程这里在哪里@小姐帮助另一个用户做类似的事情。 我能够摆脱这个想法并对其进行修改,以使其或多或少地按照我的意愿工作。下面是允许该功能的代码,除了一个小“缺陷”。
该代码允许用户选择要绘制的 X、Y 项目,并在更改组合框或按下 Prev/Next 按钮时更新图形。 因此,在这方面,代码按预期工作。
在进行更改以绘制不同的内容后,图形构建器内容框与包含组合框/按钮框的选择阵容框交换位置。 我想在窗口底部保留包含用于修改图形的选项的阵容框,但不知道该怎么做。
任何关于如何解决这个问题的建议都非常感谢! (代码在最后)。
谢谢!,
DS
启动窗口(带有以下选项):

更改 X 或 Y 组合框或上一个/下一个按钮后更新的窗口:

这是代码:
Names Default To Here( 1 );
//dt = open("$sample_data\Boston Housing.jmp");//In case the file isn't already open.<BR />
dt = Data Table( "Boston Housing" );
xlist = dt << Get Column Names( String );
gb_default = Expr(
Graph builder( Show Control Panel( 0 ), Variables( X( Column( dt, 1 ) ), Y( Column( dt, 2 ) ) ), Elements( Points( X, Y, Legend( 3 ) ) ) )
);
gb_change = Expr(
Graph builder( Show Control Panel( 0 ), Variables( X( Column( dt, xcol ) ), Y( Column( dt, ycol ) ) ), Elements( Points( X, Y, Legend( 3 ) ) ) )
);
nw = New Window( "Interactive Graph",
gb = gb_default;
lbcontent = Lineup Box( N Col( 5 ),
Spacer Box( Size( 1, 0 ) ),
Text Box( "X", <<JUSTIFY text=""></JUSTIFY>回复:JSL:如何使用组合框和 Next/Prev 按钮编写图形更新脚本你好@DonMcCormack ,
是的,这肯定可以解决问题,但我希望在用户单击 Next/Prev 按钮或从组合框中选择不同的变量集时自动更新图形。 本质上,我正在尝试重新创建 PCA 平台的功能,但将其推广到其他脚本中。
DS
回复:JSL:如何使用组合框和 Next/Prev 按钮编写图形更新脚本为什么不使用列切换器?