是否有用於訪問 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"
)];