创建报告时无法更改 FrameBox 大小 - 仅当创建所有显示框和窗口时。全部,
我有一个脚本,里面有一个函数可以创建一个 GraphBuilder。然后它会被打包到显示框中,并放入一个新窗口。不知何故,在函数内部更改 FrameBox 大小的命令被忽略了,我只能在创建窗口时更改它。这是为什么呢?我希望这个功能在函数内部,这样它就能输出一个不需要额外修改的图。在函数内部可以更改标题,为什么不能更改大小呢?
下面是通过 3 种不同的方式尝试更改 FrameBox 大小的示例 - 只有第三次有效。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
X_Parameter = "height";
Y_Parameter = "weight";
groupColumn = "sex";
titleText = "Example";
GBfunction= Function( {dt, X_parameter, Y_Parameter, groupByColumnString, titleText = ""},
groupByColumn = Column( dt, groupByColumnString );
cb = Context Box(
gb = Graph Builder(
Size( 350, 600 ),
Ignore Platform Preferences( 1 ),
Show Control Panel( 0 ),
Variables( X( Column( X_Parameter ) ), Y( Column( Y_Parameter ) ), Overlay( groupByColumn ) ),
);
rgb = gb << Report;
(rgbOB = ((rgb << XPath( "//OutlineBox[@helpKey = 'Graph Builder']" ))[1])) << Set Title( titleText );
//Attempt #1
(rgb << XPath( "(//OutlineBox//FrameBox)" )) << Frame Size( 350, 200 );
//Attempt #2
//(rgbOB << XPath( "//FrameBox" )) << Frame Size( 350, 200 );
);
Return( cb );
);
lub = Lineup Box( N Col( 3 ) );
lub << Append( GBfunction( dt, X_Parameter, Y_Parameter, groupColumn, titleText ) );
ob_group = Outline Box( "GB Function example: " || (dt << Get Name) );
ob_group << Append( lub );
nw = New Window( (dt << get name), ob_group );
//Attempt #3
rgb = ob_group << XPath( "//OutlineBox[@helpKey='Graph Builder']" );
//(rgb << XPath( "(//OutlineBox//FrameBox)" )) << Frame Size( 350, 200 );
自动化和脚本回复:创建报告时无法更改 FrameBox 大小 - 仅当创建所有显示框和窗口时。我认为更改帧大小无法正常工作,因为帧尚未可视化,一些自动调整大小确实会接管,并且可能还存在一些时间问题。
回复:创建报告时无法更改 FrameBox 大小 - 仅当创建所有显示框和窗口时。我尝试将自动拉伸设置为 0,并将拉伸设置为无,显然没有帮助:(
回复:创建报告时无法更改 FrameBox 大小 - 仅当创建所有显示框和窗口时。弄清楚是什么导致尺寸变得奇怪并不总是那么容易。你不使用 Graph Builder 的 << Size 有什么具体原因吗?我知道有时它可能需要一些预先计算,例如在使用组或包装时。
查看更多...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
X_Parameter = "height";
Y_Parameter = "weight";
groupColumn = "sex";
titleText = "Example";
GBfunction = Function({dt, X_parameter, Y_Parameter, groupByColumnString, titleText = ""}, {Default Local},
groupByColumn = Column(dt, groupByColumnString);
cb = Context Box(
gb = dt << Graph Builder(
Size(100, 100),
Ignore Platform Preferences(1),
Show Control Panel(0),
//Fit To Window("Off"),
Variables(
X(Column(X_Parameter)),
Y(Column(Y_Parameter)),
Overlay(groupByColumn)
),
);
);
rgb = Report(gb);
(rgbOB = ((rgb << XPath("//OutlineBox[@helpKey = 'Graph Builder']"))[1])) << Set Title(titleText);
fbs = rgb << XPath("(//OutlineBox//FrameBox)");
gb << Size(400, 250);
Return(cb);
);
lub = Lineup Box(N Col(3));
lub << Append(GBfunction(dt, X_Parameter, Y_Parameter, groupColumn, titleText));
ob_group = Outline Box("GB Function example: " || (dt << Get Name));
ob_group << Append(lub);
nw = New Window((dt << get name), ob_group);
回复:创建报告时无法更改 FrameBox 大小 - 仅当创建所有显示框和窗口时。是的,这是有原因的——我需要模仿之前使用 Fit Y by X 的脚本版本中的外观和感觉。
GraphBuilder 将根据 GB 显示框中的其他元素(例如轴或图例大小)更改 FrameBox 大小。
最后,这些图表将生成一份报告,其中图表区域的大小(即 FrameBox 的具体含义)应该在报告中的不同图表之间保持一致。这就是原因所在。
回复:创建报告时无法更改 FrameBox 大小 - 仅当创建所有显示框和窗口时。一种选择是先创建新窗口
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
X_Parameter = "height";
Y_Parameter = "weight";
groupColumn = "sex";
titleText = "Example";
GBfunction = Function({lub, dt, X_parameter, Y_Parameter, groupByColumnString, titleText = ""}, {Default Local},
cb = Context Box(
gb = dt << Graph Builder(
Size(600, 600),
Ignore Platform Preferences(1),
Show Control Panel(0),
Fit To Window("Off"),
Variables(X(Eval(X_Parameter)), Y(Eval(Y_Parameter)), Overlay(Eval(groupByColumnString))),
)
);
rgb = Report(gb);
lub << Append(cb);
(rgbOB = ((rgb << XPath("//OutlineBox[@helpKey = 'Graph Builder']"))[1])) <<
Set Title(titleText);
fbs = rgb << XPath("(//OutlineBox//FrameBox)");
fbs << Frame Size(400, 250);
);
lub = Lineup Box(N Col(3));
ob_group = Outline Box("GB Function example: " || (dt << Get Name));
ob_group << Append(lub);
nw = New Window((dt << get name), Window View("Invisible"), ob_group);
GBfunction(lub, dt, X_Parameter, Y_Parameter, groupColumn, titleText);
nw << Show Window(1);
回复:创建报告时无法更改 FrameBox 大小 - 仅当创建所有显示框和窗口时。你的示例按写的那样运行。然而,当我尝试在实际脚本中实现它时,它最终会将 FrameBox 的大小从 Size(350, 600) 调整为其他值。
基本上,我使用 LineUpBox 是有原因的——我在这个框中生成了几个图,并且每隔三个图(或者更准确地说,每行最右边的每个图)都会显示图例(所有图都相同)。所以,当我用三个图运行它时,所有三个 FrameBox 的最终大小最终都是:
{{350, 220}, {350, 220}, {350, 240}}
而不是我试图将其调整为的 {350, 200} 或 GraphBuilder 所用的初始 {350, 600}。
稍后我将尝试制作一个可以打破您的建议的有效示例。
回复:创建报告时无法更改 FrameBox 大小 - 仅当创建所有显示框和窗口时。这一直是 GraphBuilder 的一个 bug,而且没有简单的解决方法。我有一个外部程序可以向 JMP 发送通知(它是一个本地服务器,JMP 用 runcommand 启动),我给它发送了一条消息,让它在 0.25 秒内 ping 回 JMP,然后我触发了强制调整帧大小的操作——现在所有框都绘制完成后才会执行。