向多个二元图发送命令我有一个脚本,可以在单个窗口中生成一系列双变量图,并使用 LineUpBox 包含每个图。创建绘图后,我希望用户可以选择打开/关闭绘图点(我打算添加其他选项......这仅作为一个示例)。我设想用户可以单击窗口中的按钮框或复选框,并且所有绘图都将反映此操作。
对于单个图,我将使用以下命令:
bvp << Show Points(0/1);
其中 bvp 是对二元图的引用。但是,这里我有多个图,无法对所有图使用单个参考。我尝试引用包含绘图的 LineUpBox:
For(plid = 1, plid <= nplots, plid++,
LUB_plots[plid] << Show Points(pts)
)
其中 LUB_plots 是对我的阵容框的引用。例如,每次用户选中复选框时都会运行此循环。当我这样做时,我收到以下错误:
The display box 'OutlineBox' does not recognize the message 'Show Points'; perhaps you mean one of these: <<Show Properties <<Show HelpKeys <<SetHorizontal <<Horizontal <<SetOpen <<GetHorizontal <<Close Where No Outlines <<Font <<Set Font <<Set Font Style <<Set Font Size <<Reshow <<Set Report Title <<Set Window Title <<Top Parent <<Show Tree Structure <<Restore Window Size <<Set Window Size <<Set Content Size <<Get Window Position <<Show Window <<Get Show Window <<Set Window Title <<Set Window Icon <<Set Print Headers <<Set Print Footers <<Scroll Window <<Set Width <<Set Height <<Horizontal Alignment.
以及每个图的以下实例:
(The following message might not be an actual error; the preference 'Report Invalid Display Box Messages' is ON.) The display box 'OutlineBox' does not recognize the message 'Show Points'.
我检查了树结构并确认,是的,顶部显示框确实是一个轮廓框。所以至少我知道 LineUpBox[plid] 正在瞄准我预期的目标。问题似乎是我的 <
我的问题:如何引用多个二元图?或者,是否有更好的方法在创建多个二元图后将命令发送到它们?也许使用某种 Dispatch/SendtoReports 命令结构?
不知道如何在社区中搜索这个。任何帮助表示赞赏。
回复:向多个二元图发送命令再次感谢。优雅的。
回复:向多个二元图发送命令这种语法似乎有效:
y_axes = (lub << xpath("//AxisBox[@charID='2']"));
y_axes << scale(Log);
有关 xpath 文档,请参阅示例w3schools XPath 教程
回复:向多个二元图发送命令谢谢!xpath cmd 对于我的显示点示例非常有用。
现在我有一个后续行动。如何向所有绘图发送命令,将 y 轴从线性更改为对数?首先,我尝试使用 xpath 命令来创建对所有 y 轴框的所有引用的列表。我首先只是想确认 xpath 命令正在提取正确的引用。但我似乎无法让它只返回那些盒子。通过检查日志中的 xml 代码,我可以看到 y 轴框都有一个“charID=\!"2\!"”,因此我尝试使用它来区分 y 和 x,但没有运气。
Names Default To Here(1);
//Example report
Open("$SAMPLE_DATA/Big Class.jmp");
Try(Window("example") << Close Window);
nw = New Window("example",
lub = Lineup Box(
Bivariate(Y(:weight), X(:height), FitLine()),
Bivariate(Y(:weight), X(:age), FitLine()),
Bivariate(Y(:age), X(:age), FitLine()),
Bivariate(Y(:weight), X(:weight), FitLine())
)
);
Show(lub << Get xml);
Show(lub << xpath("//AxisBox")); //list of 8 displayboxes
Show(lub << xpath("//AxisBox[2]")); //empty list
Show(lub << xpath("//AxisBox['2']")); //list of 8 displayboxes
Show(lub << xpath("//AxisBox[\!"2\!"]")); //list of 8 displayboxes
Show(lub << xpath("//AxisBox[charID=\!"2\!"]")); //empty list
Show(lub << xpath("//AxisBox[\!"charID=2\!"]")); //list of 8 displayboxes如何让 xpath 仅返回 4 y 轴盒?
一旦我成功生成了对我想要的特定轴框的引用,我是否需要像前面的示例一样发送“获取可编写脚本的对象”命令,或者我可以直接将“缩放”命令发送到引用列表吗?
我通读了 JMP Summit 演示文稿和您提供的 .jsl 代码示例...非常有帮助。然而,脚本索引中的附加文档很少,并且脚本指南中似乎也不存在。xpath 上有更多可用文档吗?我想知道输入的格式是什么。例如,开头的“//”是做什么的?我应该如何格式化其余的输入以获得我需要的显示框?
谢谢。
回复:向多个二元图发送命令或者更简单路径,受到刚刚发布的 JMP 峰会演讲的启发这里:
Names Default To Here(1);
//Example report
Open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("example",
lub = Lineup Box(
Bivariate(Y(:weight), X(:height), FitLine()),
Bivariate(Y(:weight), X(:age), FitLine()),
Bivariate(Y(:age), X(:age), FitLine()),
Bivariate(Y(:weight), X(:weight), FitLine())
)
);
//Make list of plots
L = (lub << xpath("//LineUpBox/OutlineBox")) << get scriptable object;
// Send messages to all plots, e.g
L << show points(0);
回复:向多个二元图发送命令这显示点()消息需要发送至双变量对象而不是其顶部显示框。 从现有的显示树中,可以通过以下方式获取对关联对象的引用<<获取可编写脚本的对象。
还说明了将消息发送到多个绘图的一种方法的示例:
Names Default To Here(1);
//Example report
Open("$SAMPLE_DATA/Big Class.jmp");
New Window("example",
lub = Lineup Box(
Bivariate(Y(:weight), X(:height), FitLine()),
Bivariate(Y(:weight), X(:age), FitLine()),
Bivariate(Y(:age), X(:age), FitLine()),
Bivariate(Y(:weight), X(:weight), FitLine())
)
);
//Make list of plots (here top-level Outline boxes)
L = {};
i = 1;
While(Is Scriptable(Try(lub[Outline Box(i)])),
If((lub[Outline Box(i)] << parent) << classname == "LineUpBox",
Insert Into(L, lub[Outline Box(i)] << get scriptable object)
);
i++;
);
// Send messages to all plots, e.g
L << show points(0);