你好。 有没有一种方法可以获取图形生成器窗口中使用的变量名称和角色? 假设我有一个包含图形生成器绘图的窗口。 有没有办法以编程方式确定哪个变量用于 X、Y、Xgroup、Ygroup 等?
例如,假设用户创建了一个以 GB 为单位的绘图。 现在他们希望在绘图上运行一些通用脚本(例如图形脚本)。 脚本需要知道哪些变量在哪些角色中使用,而无需用户告知。
假设我从这个情节开始:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y), Smoother(X, Y))
);
现在我希望在生成的图上运行脚本。 我的剧本不知道情节中包含什么。 这是我尝试过但没有成功的两件事:
Names Default to Here(1);
//Try to get script used to create plot
win = Window(1); //gets most recent window clicked on
gb = win << Report; //DNW: returns missing (win is not a platform)
scr = gb << Get Script; //from here I could parse the string to determine the roles
//Another stab: try to read the XML
win = Window(1);
str = win << Get XML; //This gives me the XML of the window, but does not provide the actual variable names used in the roles.
如果我能弄清楚如何将窗口引用转换为报告,我想我可以让第一种方法发挥作用。 有任何想法吗?
</CODE></P></LINGO-BODY><LINGO-LABS id="lingo-labs-272624" slang="en-US" mode="NONE"><LINGO-LABEL>高级统计建模</LINGO-LABEL><LINGO-LABEL>大规模定制</LINGO-LABEL><LINGO-LABEL>质量和工艺工程</LINGO-LABEL></LINGO-LABS><LINGO-SUB id="lingo-sub-273136" slang="en-US" mode="NONE">回复:从 graphbuilder 获取变量名称</LINGO-SUB><LINGO-BODY id="lingo-body-273136" slang="en-US" mode="NONE">谢谢。 这正是我所需要的。</LINGO-BODY><LINGO-SUB id="lingo-sub-273026" slang="en-US" mode="NONE">回复:从 graphbuilder 获取变量名称</LINGO-SUB><LINGO-BODY id="lingo-body-273026" slang="en-US" mode="NONE"><P><A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/3648" target="_blank">@尼克尔斯</A>你是对的,悬停标签功能是基于交互性的。 有多种方法可以使用 JSL 触发该操作(通过移动鼠标、暂停等),但这会给解决方案增加很多您实际上不需要的复杂性。</P>
<P>根据您的回复和提出的解决方案<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/2687" target="_blank">@tx尼尔森</A>,这里有一个脚本,它将带您从窗口引用一直到图形生成器变量引用。</P>
<PRE><CODE class=" language-jsl">Names Default to Here(1);
win = New Window("A Title", // Let's create a Window that contains a Graph Builder
Graph Builder( // with a LDF to make things interesting (multiple OutlineBoxes).
Size( 517, 448 ),
Show Control Panel( 0 ),
Variables( X( :sex ), Y( :height ) ),
Elements( Bar( X, Y, Legend( 6 ) ) ),
Local Data Filter(
Add Filter( columns( :height ), Where( :height >= 60.048 & :height <= 70 ) )
)
));
ob = win[OutlineBox("Graph Builder")]; // This is how you get the Display Box that contains the GB object
gbb = ob << Get Scriptable Object; // Now we extract the GB object from the Display Box
gb_expr = gbb << Get Script; // You could wrap in Char() to get the GB script as a string
gb_nargs = NArg(gb_expr); // and use pattern matching. Instead,
for(i = 1, i <= gb_nargs, i++, // let's see how to inspect it as an expression.
child = Arg(gb_expr, i);
If (HeadName(child) == "Variables",
var_nargs = NArg(child);
for(j = 1, j <= var_nargs, j++,
Show(Arg(child, j))
);
Break();
)
);
你应该看到:
Arg(child, j) = X(:sex);
Arg(child, j) = Y(:height);
JMP 15 中添加的悬停标签扩展允许您定义将在图形上下文(准确地说是悬停标签执行上下文)中执行的脚本。 此上下文在有关悬停在其上的视觉元素的局部变量中提供信息,包括哪些变量被用作“分组”(X、GroupX、GroupY 等)和测量值(Y、颜色、大小等)。
您可以在自己的脚本中访问这些变量,或许还可以使用它们来定义新的可视化或分析。 这正是悬停标签预设的工作原理。 您可能想要选择一个,然后在悬停标签编辑器(或通过保存脚本)中查看生成的 JSL 代码以查看示例。
您还可以使用 Textlet“上下文”预设来查看它们的值(可从悬停标签编辑器上的 Textlet 面板获取):

给出了执行上下文中可用的变量的完整列表这里。
我以为我记得以前有过一个关于这个的问题,但是我搜索了一下,没有找到。无论如何,我用来做这种事情的方法是向图形生成器发送一条消息,以检索用于创建显示的脚本,并将其转换为字符变量,然后解析字符串以查找提到的变量。
剧本
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
gb = Graph Builder(
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 6 ) ), Smoother( X, Y, Legend( 7 ) ) )
);
theScript = char(gb << get script);
show(theScript);
检索:
theScript = "Graph Builder(Variables(X(:weight), Y(:height)), Elements(Points(X, Y, Legend(6)), Smoother(X, Y, Legend(7))))";