JSL:如何循环遍历列、生成图形生成器报告并将每个报告保存为 JPG 文件你好,
我有一个包含 41 个变量的数据集。 例如,我需要将前 40 个图像中的每一个与最后一个图像进行比较,以制作 40 个箱线图或抖动图。
要通过创建图形菜单创建一个功能齐全的漂亮绘图,既简单又有趣。 我知道如何保存我所做的脚本,但我不知道如何编写一个循环,该循环将在每次迭代中使用另一个变量并将其替换为我的原始图形代码。 换句话说,如果我有 20 行代码,我想要一个循环来一遍又一遍地运行相同的代码,并且只会更改定义因变量的位置。 此外,我需要一种很好的方式来显示结果(40 个窗口不切实际),所以我想也许可以将每个窗口保存为 JPG,然后再进行下一次迭代。 JMP 可以做到这一点吗?
谢谢 !
回复:JSL 循环以下示例演示如何获取字符串形式的列名称列表。For 循环生成一个不可见的图形生成器,从列表中的第二列开始,因为第一列用作 X。(原始帖子需要调整这些以从列表中的第一列开始,并在列表中的最后一列之前停止。)每个图形生成器报告都保存为 JPG 文件,其中列名包含在文件名中。最后关闭数据表和隐形报表。
/* Open a sample data table */
dt = Open( "$SAMPLE_DATA\Fitness.jmp" );
/* Obtain a list of numeric/continuous column names as strings */
colList = dt << Get Column Names( Continuous, String );
/* Loop through the list to generate the desired Graph Builder
and save the report as a JPEG file */
For( i = 2, i <= Nitems( colList ), i++,
gb = dt << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables(
X( :Age ),
Y( Column( dt, colList[i] ) ),
Color( :Age )
),
Elements(
Points(
X,
Y,
Legend( 3 ),
Summary Statistic( "Mean" ),
Error Bars( "Confidence Interval" )
)
),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Marker Size( 5 )}
)
),
Invisible
);
gb << Save Picture( "E:\Trash\Graph Builder_" || colList[i] ||".jpg", JPEG );
);
/* Close table and all invisible reports */
Close( dt, No Save );
希望有帮助!
JSL循环你好,
感谢您尝试提供帮助。 不幸的是,我对 JSL 还不够熟悉(当我下班休息时我会深入研究它),而且我在括号之类的方面遇到了麻烦,所以你的建议不起作用,我可能有一个标志在错误的地方。
我原来的代码是:
Graph Builder(
Size( 880, 750 ),
Show Control Panel( 0 ),
Variables(
X( :Cutoff, Size( 0, 21 ) ),
Y( :S1, Size( 0, 22 ) ),
Color( :Cutoff )
),
Elements(
Points( X, Y, Color, Legend( 1 ), Jitter( 1 ) ),
Line(
X,
Y,
Color,
Legend( 2 ),
Row order( 0 ),
Error Bars( "Confidence Interval" ),
Summary Statistic( "Mean" )
)
),
SendToReport( Dispatch( {}, "Graph Builder", FrameBox, {Marker Size( 5 )} ) )
);
你能帮我用环把它包起来吗?
干杯!
JSL循环你好!你想做的事情相当简单。
首先,在脚本中您需要定义当前数据表:
cd = Current Data Table();
现在,获取列名称列表:
column_names = cd << Get Column Names;
现在,有多种方法可以完成下一部分,但我发现这是最简单的。您将需要开始一个我们最终将解析和评估的文本字符串。第一部分是创建一个新窗口。
nw = "New Window(\"Graphs\",
randomname = V List Box(";
现在我们可以编写循环,该循环将插入您的自定义代码,并进行一点小小的修改。我假设您知道如何使用 JMP“for”循环 - 我将迭代表中除最后一列之外的所有列。
for(i=1,i<=length(column_names)-1,i++,
nw = nw || "PUT YOUR CUSTOM CODE HERE*" || ",";
);
*在您定义因变量的自定义代码中,将其删除并将其替换为
:Name(\"" || column_name || "\")
这样做的作用是粘贴您编写的自定义脚本中每个因变量的文本名称。
最后,我们需要完成之前开始的新窗口:第一行完成编写新窗口的代码,第二行首先解析文本以使其成为代码,然后评估 nw 中包含的代码。
nw = nw || "));";
eval(parse(nw));
应该可以了 - 如果您有任何问题或需要具体帮助,请告诉我!