JMP 脚本进度指示器<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />你好,
通过在这个论坛上进行一些搜索并深入研究 JMP 脚本编写书籍,我已经成功地使我的进度脚本基本正常工作。我唯一不喜欢的是垂直(y)轴上有数字。 我可以把它们关掉吗? 我无法找到一种方法来做到这一点。不确定我是否应该使用图形框()以外的东西,但我对此的了解相当有限。
dlgStatus = new window("转换进度",
dlg_gb = 图形框(
标题(“转换进度”),
帧大小 ( 200, 30),
xscale(0,100),
yscale(0, 1), // <---- 如何关闭以便看不到 y 轴值?
yaxis(显示主要刻度(0),显示次要刻度(0)),
xname("完成%"),
名字("")
)
);
dlgStatus[FrameBox(1)] << 添加图形脚本({填充颜色("蓝色"),矩形(0,1,50,0,1)}); // 50% 到 100% 的比例如上面的 xscale 所示。不会缩放到帧大小()中的像素数
dlgStatus[FrameBox(1)] << 添加图形脚本({填充颜色("蓝色"),矩形(0,1,75,0,1)}); // 75% 到 100% 的比例如上面的 xscale 所示。
// 上面只是一个测试。在我的真实脚本中,50 和 75 将是循环索引变量除以循环计数。 它会在每个循环迭代中执行一次。
dlgStatus << 关闭窗口();
谢谢。
回复:JMP 脚本进度指示器如果您的脚本运行单个循环,您可以使用 SDF1 的示例并仅更新整个 prog 变量。 为了节省时间而不是每次迭代都更新,我使用迭代变量的 mod() 函数每 10 次或 50 次(记不太清楚)更新一次。 自从我创建代码以来,JMP 可能在过去 11 年里对此进行了改进,但最初它减慢了脚本速度,每次迭代都会更新条形图,同时迭代数百到数千列。
如果您的脚本没有循环,而是执行多个操作,您可能只需要更新整个脚本中的进度条。 例如,如果您有 10 个操作,每个操作需要 30 秒,则每一步增加 10% 的进度。 这将是您的手动过程,用于确定每段代码的执行时间。
如果有上述的某种组合,您可以发挥创意,但无论哪种方式,都需要您弄清楚执行时间在脚本中的分布情况,然后相应地绘制进度。 JMP 不会自动执行此操作,您需要编写代码以根据进度更新条形图。
这一切都假设即使有更快和更慢的计算机,每个代码块将花费相对比例的总执行时间来执行,这是相当合理的。
回复:JMP 脚本进度指示器请教一个问题,当我的程序运行时间较长,大约5分钟左右,并且不同电脑上运行的时间不同时,如何根据实际运行等待时间制作相应的进度条?
回复:JMP 脚本进度指示器我觉得@pmroz提供了一种在这种情况下安全的简单直接解决方案。 但请注意,在其他情况下,使用 << 删除消息从显示树中删除显示框对象可能会很危险。 为此,至少有两种其他方法。 通常,您可以使用 << Visibility() 消息修改显示框的可见性。 在这种情况下使用 Collapse 参数。 另一个是 Axis Box 对象的独特协议。 请参阅此处的示例:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = dt << Bivariate( Y( :weight ), X( :height ), Fit Line );
axis box = Report( biv )[AxisBox( 1 )];
axis box << Remove Axis Label( "weight" );
axis box << Show Major Labels( 0 );
axis box << Show Major Ticks( 0 );
回复:JMP 脚本进度指示器你好@mikedriscoll和@pmroz ,
我最近看到这篇文章,因为我想生成一个类似的进度窗口,它实际上在长时间的建模运行中给出了 Y 中的迭代次数 X。 不管怎样,我接受了你的解决方案并对其进行了修改并添加到我正在开发的解决方案中这里.,所以现在我既有进度条又有实际数字。 我喜欢。 我可能需要根据用户的喜好修改它,但这是一个很好的开始。 感谢您发起这次讨论!
Names Default To Here( 1 );
i = 1;
imax = 100;
dlgStatus = New Window( "Overall Modeling Progress",
V List Box(
dlg_gb = Graph Box(
Title( "Overall Modeling Progress" ),
FrameSize( 150, 15 ),
X Scale( 0, 100 ),
Y Scale( 0, 1 ),
yaxis( show major ticks( 0 ), show minor ticks( 0 ) ),
xname( "% complete" ),
yname( "" )
),
tb = Text Box(
" Current step " || Char( i ) || " of " || Char( imax ),
<<SET font="" size=""></SET>
DS
回复:JMP 脚本进度指示器谢谢,效果很好。
(1) 去掉了我的 y 轴。 我将 (2) 保留在原处以显示 %。
我还发现我需要一点等待(不仅仅是 wait(0);)来更新图形...这是我更新图形框的循环的结尾:
| | 进度 = 楼层((paramNum / numParams)*100); |
| | dlgStatus[FrameBox(1)] << 添加图形脚本({填充颜色("蓝色"),矩形(0,1,进度,0,1)}); //更新进度 |
| | 等待(0.001); |
);
不确定我是否需要“地板”功能,但它对我来说并没有什么坏处。
回复:JMP 脚本进度指示器您可以使用以下命令删除轴:
dlg_gb[AxisBox( 2 )] << Delete;
dlg_gb[AxisBox( 1 )] << Delete;
将这两行放在第一行之前dlgStatus[FrameBox(1)]...命令。