是否有訪問 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 才能檢查相同的行為是否仍然存在。 我的猜測是身份證號碼,這看起來很奇怪。
@nascif_jmp ,感謝您的<<獲取本地上下文響應。 雖然它並不完全符合我的要求,但它提供了豐富的信息,並且似乎是一個有用的功能。 我會將您和 Ian 的回复標記為解決方案。
如果有人關注這篇文章,我附上了一個腳本,其中包含一種方法來使用 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]);
);
它產生如下所示的表格。 注意數據表止痛藥,“疼痛”一欄的顯示格式為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)
我認為這是一個非常好的問題,我嘗試做一些其他的事情,但沒有成功。 我嘗試運行腳本,將腳本保存到腳本窗口,然後在腳本窗口窗口中搜索相關信息。 但事實證明這是相當困難的。
不管怎樣,謝謝你的回复。 我嘗試運行您提供的腳本,但發生了兩件奇怪的事情:
- 當我嘗試按原樣運行腳本時,代碼的“發送到報告(Dispatch(...))”部分實際上並未將引腳註釋附加到圖表中。 我必須手動返回並執行此操作。
- 執行上述操作後,當我嘗試運行行 hlec = gpin << Get Local Context(); 時JMP 在日誌中給出此錯誤:對象“gpin”無法識別消息“獲取本地上下文”;也許您的意思是其中之一:<<替換文本... <<添加文本... <<文本顏色<<恢復文本<<標記線<<啟動graphlet<<獲取鏈接。 並為 hlec 返回 null。
有什麼想法為什麼其中任何一個都不能正常工作嗎?
當我在腳本索引中搜索“獲取本地上下文”命令時,我的 JMP 版本也無法識別該命令,也許這就是#2 不起作用的原因?
謝謝!,
DS
回复:是否有訪問 GraphBuilder BoxPlotSeg 標籤的 JSL 消息你好呀, @gzmorgan0 ,
對的,這是可能的。 其中一些註釋消息是最近添加的,以幫助我們的測試框架,如果沒有正確記錄它們,我深表歉意。 我一定會調查此事。
請參閱下面的腳本。 它展示瞭如何獲取註釋(在本例中是固定的懸停標籤)內容作為單個文本段落(使用複製)並作為關聯數組形式的數據(使用獲取本地上下文)。正如您所看到的,懸停標籤上下文數據不僅包括可見的懸停標籤條目,而且被 Graphlet 預設大量使用。 我相信高級用戶將能夠利用它們來創建一些真正有趣的交互式 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"
)];