向多個二元圖發送命令我有一個腳本,可以在單一視窗中產生一系列雙變量圖,並使用 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);