是否有用于访问 GraphBuilder BoxPlotSeg 标签的 JSL 消息
JMP 14 和 15 中的 GraphBuilder BoxPlot 段似乎具有内置悬停标签。
交互式地,悬停标签可以被固定。
下面嵌入的是固定悬停标签的图片和相关的已保存脚本。
我有兴趣访问 BoxPlotSeg 围栏。 我还没有找到访问栅栏值的 JSL 语法。 从保存的交互式会话脚本来看,这些围栏值似乎是 GraphBuilder 所固有的。 我知道如何查找/计算异常值箱线图的围栏值。 但是,如果 JMP 通过 GraphBuilder 或其他方法公开了这些值,我想知道如何访问围栏值。

Open( "$Sample_Data/Analgesics.jmp" ) <<
Graph Builder(
Size( 528, 448 ),
Show Control Panel( 0 ),
Variables( X( :drug ), Y( :pain ) ),
Elements( Points( X, Y, Legend( 5 ) ), Box Plot( X, Y, Legend( 6 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
Add Pin Annotation(
Seg( Box Plot Seg( 2 ) ),
Index( {1, 1} ),
Index Row( {1, 1} ),
UniqueID( 568563361 ),
FoundPt( {321, 356} ),
Origin( {1.14256198347107, 3.97321428571429} )
)
)
)
);
谢谢!
脚本回复:是否有用于访问 GraphBuilder BoxPlotSeg 标签的 JSL 消息@ian_jmp是正确的,我的目标是在没有固定消息的情况下访问栅栏。
是的,<< Get Quantiles 将帮助我计算栅栏值、q50 +/- 1.5*(q75-q25) 范围内的最大和最小数据值。 所以计算起来并不难。 我只是想知道有一种方法可以访问它们。
@SDF1 ,我还没有升级到 15.1,我看到调度的间歇性行为工作或被忽略。 它将作为脚本工作,然后它不会。 我会打开一个新会话,它会起作用。我必须升级到 15.1 以检查相同的行为是否仍然存在。 我的猜测是似乎很奇怪的 ID 号是问题所在。
@nascif_jmp ,感谢您的<<获取本地上下文响应。 虽然它不完全符合我的要求,但它提供了丰富的信息,并且似乎是一个有用的功能。 我会将您和伊恩的回复标记为解决方案。
如果有人关注这篇文章,我附上了一个脚本,其中一种方法是使用 JSL 获取箱线图围栏(获取分位数的多种方法等)
Names Default to Here(1);
dt = Open("$Sample_Data/Analgesics.jmp");
boxNodes = dt << Summary(
Group( :drug ),
Quantiles( 25, :pain ),
Median( :pain ),
Quantiles( 75, :pain ),
Freq( "None" ),
Weight( "None" ),
statistics column name format( "stat" )
);
bmin = boxNodes << New Column("Lower Fence", numeric, continuous);
bmax = boxNodes << New Column("Upper Fence", numeric, continuous);
bq25 = column(boxNodes, "Quantiles25");
bq75 = column(boxNodes, "Quantiles75");
bq50 = column(boxNodes, "Median");
bidx = Column(boxNodes, "drug");
For(i=1, i<=nrow(boxNodes), i++,
ll = bq50[i] - 1.5*(bq75[i] - bq25[i]);
ul = bq50[i] + 1.5*(bq75[i] - bq25[i]);
idx = dt << get rows where( :drug == bidx[i] & ll <= :pain <= ul );
bmin[i] = min(dt:pain[idx]);
bmax[i] = max(dt:pain[idx]);
);
它产生如下所示的表格。 注意数据表Analgesics,“疼痛”列的显示格式为2位小数;栅栏值是表存储的值。

回复:是否有用于访问 GraphBuilder BoxPlotSeg 标签的 JSL 消息@gzmorgan0说 '我有兴趣访问 BoxPlotSeg 围栏。 我不知道“GetLocalContext”,但它似乎依赖于实际存在的注释。 但也许“GetMoments”和“GetQuantiles”,它们都返回一个矩阵,可能会有所帮助。
回复:是否有用于访问 GraphBuilder BoxPlotSeg 标签的 JSL 消息你好@nascif_jmp ,
是的,由于其他原因,我还需要升级到 15.1:当前版本无法识别共享网络驱动器上目录中的所有文件。 有时它会在实际存在的数百个文件中看到 1 个或 2 个或 6 个文件。 显然,这也是 OneDrive 的一个已知问题。 有人告诉我 15.1 修复了这个问题。
我一直在等待我们的 IT 部门推出它,但由于全球有数百名用户使用 JMP,我想这可能需要他们一些时间。
谢谢!,
DS
回复:是否有用于访问 GraphBuilder BoxPlotSeg 标签的 JSL 消息你好@SDF1 ,
获取本地上下文在 15.1 中引入。 复制有效,您可以获取全文并对其进行解析,尽管我意识到这并不理想(这就是我添加的原因获取本地上下文之后)。
我看到注释也没有显示的问题。 幸运的是,它在 15.1 中按预期工作。
看,我刚刚给了你两个升级 JMP 安装的理由! 
回复:是否有用于访问 GraphBuilder BoxPlotSeg 标签的 JSL 消息你好@nascif_jmp ,
(Win 10 企业版,64 位,JMP Pro 15.0.0)
我认为这是一个非常好的问题,我尝试做一些其他的事情,但没有成功。 我曾尝试运行脚本,将脚本保存到脚本窗口,然后在脚本窗口窗口中搜索相关信息。 不过,这被证明是相当困难的。
无论如何,谢谢你的回复。 我尝试运行您提供的脚本,但发生了两件奇怪的事情:
- 当我尝试按原样运行脚本时,代码的“发送到报告(调度(...))”部分实际上并未将引脚注释附加到图表中。 我必须手动返回并执行此操作。
- 执行上述操作后,当我尝试运行 hlec = gpin << Get Local Context(); JMP 在日志中给出此错误:对象“gpin”无法识别消息“获取本地上下文”;也许您的意思是其中之一:<<替换文本... <<添加文字... <<文本颜色<<恢复文本<<标记线<<启动graphlet <<获取链接。 并为 hlec 返回 null。
任何想法为什么其中任何一个都不能正常工作?
当我在 Scripting Index 中搜索 Get Local Context 命令时,我的 JMP 版本也无法识别它,也许这就是 #2 不起作用的原因?
谢谢!,
DS
回复:是否有用于访问 GraphBuilder BoxPlotSeg 标签的 JSL 消息你好呀, @gzmorgan0 ,
对的,这是可能的。 其中一些注释消息是最近添加的,以帮助我们的测试框架,如果没有正确记录它们,我深表歉意。 我会确保对此进行调查。
请参阅下面的脚本。 它显示了如何将注释(在本例中是固定的悬停标签)内容作为单个文本段落(使用复制) 和作为关联数组形式的数据(使用获取本地上下文)。如您所见,悬停标签上下文数据不仅包括可见的悬停标签条目,而且被 Graphlet Presets 大量使用。 我相信高级用户将能够利用它们来创建一些非常有趣的交互式 JMP 应用程序。 有关可用数据类型的更多信息,请查看:
https://www.jmp.com/support/help/en/15.2/index.shtml#page/jmp/work-with-the-hover-label-execution-context.shtml
Names Default to Here(1);
dt = Open( "$Sample_Data/Analgesics.jmp" );
gb = dt << Graph Builder(
Size( 528, 448 ),
Show Control Panel( 0 ),
Variables( X( :drug ), Y( :pain ) ),
Elements( Points( X, Y, Legend( 5 ) ), Box Plot( X, Y, Legend( 6 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
Add Pin Annotation(
Seg( Box Plot Seg( 2 ) ),
Index( {1, 1} ),
Index Row( {1, 1} ),
UniqueID( 568563361 ),
FoundPt( {321, 356} ),
Origin( {1.14256198347107, 3.97321428571429} )
)
)
)
);
frame = (gb << Report)[FrameBox(1)];
gpin = frame << Get Annotation();
pinText = gpin << Copy();
Show(pinText);
hlec = gpin << Get Local Context();
Show(hlec);
日志结果:
pinText = "
Maximum, excluding outliers: 16.636
75%: 12.93
50%: 9.418
25%: 7.84
Minimum, excluding outliers: 3.838
drug: B
N: 7";
hlec = ["_25%" => 7.84, <BR />"_50%" => 9.418, <BR />"_75%" => 12.93, <BR />"_dataTable" => Data Table( "Analgesics" ), <BR />"_displaySegName" => "BoxPlotSeg", <BR />"_drillDepth" => 1, <BR />"_drug" => "B", <BR />"_filters" => {:pain, :drug}, <BR />"_firstRow" => -1, <BR />"_groupings" => {:pain, :drug}, <BR />"_Maximum, excluding outliers" => 16.636, <BR />"_measurements" => {}, <BR />"_Minimum, excluding outliers" => 3.838, <BR />"_mode" => "Test", <BR />"_N" => 7, <BR />"_pain" => {7.84, 12.93}, <BR />"_summaryStatistic" => "", <BR />"_underlyingRows" => 7, <BR />"_where" => ":pain >= 7.84 & :pain < 12.93 & :drug == \!"B\!"", <BR />"_whereExpr" => Expr(
:pain >= 7.84 & :pain < 12.93 & :drug == "B"
)];