如何獲取圖例框信息,例如顏色和標記類型親愛的 JMP 社群:
(W10 企業版 64 位元、JMP Pro 15.0)
我有一個用戶正在使用圖形生成器生成一個包含多個資訊位元的相當複雜的圖形。 市場數據按區域、客戶等劃分。因此,散點圖採用顏色編碼並具有多個標記。 作為範例,下面的圖表可能看起來像這樣(使用 Big Class Families.jmp)。

我想做的是獲取他的原始圖形生成器圖,並從圖例中提取標記樣式和顏色,並將它們設為 dt 屬性。 目的是讓使用者可以執行一些 JSL 程式碼作為工具列中的熱按鈕,以修復資料的標記和顏色。 需要這樣做的原因是,在圖形產生器中,每當使用者使用資料過濾器更改區域時,客戶群組的顏色編碼和標記都會發生變化,因為每個區域內的客戶數量都會發生變化。 例如,他們希望將其作為資料列的固定屬性。
我正在嘗試一些像這樣的 JSL 程式碼,試圖從樹結構內的 LegendBox(1) 獲取信息,但我得到 null 作為該行的結果: test = legend<
Names Default to here(1);
dt = Open("$Sample_Data/Big Class Families.jmp");
gb=dt<<GRAPH builder=""></GRAPH><BR />test = legend<<GET property=""></GET>如果顏色資訊是 RGB 或其他形式,那就沒問題,它不需要像「藍色」或「紅色」這樣的名稱。
非常感謝任何有關如何進行的建議。
謝謝,
DS
回覆:如何取得圖例框訊息,例如顏色和標記類型你好@MJE ,
感謝您的額外回饋。 有用! 感謝您的解決方案,我會將其標記為這樣。 我確實稍微修改了它,使其更像用戶所要求的,但除此之外,它完成了工作。 據我所知,標記和顏色清單的順序與圖例相同。
這是我使用的程式碼的修改版本:
Names Default To Here( 1 );
dt = Open( "$Sample_Data/Big Class Families.jmp" );
gb = dt << Graph Builder(
Size( 528, 456 ),
Show Control Panel( 0 ),
Graph Spacing( 5 ),
Variables( X( :weight ), Y( :height ), Overlay( :age ), Color( :age ) ),
Elements( Points( X, Y, Legend( 33 ) ) ),
MarkerSeg(:weight, :height)
);
segs = Report(gb)[Framebox(1)]<<FIND segs=""></FIND>
我得到的輸出:
MarkerList = {"圓形", "加號", "菱形", "X", "三角形", "Y"};
顏色列表= {{66, 112, 221}, {212, 73, 88}, {61, 174, 70}, {162, 43, 221}, {204, 121, 41}, {40, 182, 143 } };

謝謝!,
DS
回覆:如何取得圖例框訊息,例如顏色和標記類型也許這裡的這一部分可能對您有幫助。 至少,它為您提供了一些信息,圖表中的實際數據點具有哪種顏色和標記。 不幸的是,我無法找到一種方法來直接將資料點(分別是標記段)與實際行號相關聯。 也許其他人有關於如何做到這一點的想法...
“取得標記”訊息可以替換為“取得標記”,以便為您提供此標記段中已使用標記的清單。 但由於它們在這種狀態下都是相同的,所以我將其縮短以提高可讀性。
Names Default To Here( 1 );
dt = Open( "$Sample_Data/Big Class Families.jmp" );
gb = dt << Graph Builder(
Size( 528, 456 ),
Show Control Panel( 0 ),
Graph Spacing( 5 ),
Variables( X( :weight ), Y( :height ), Overlay( :age ), Color( :sex ) ),
Elements( Points( X, Y, Legend( 33 ) ) ),
MarkerSeg(:weight, :height)
);
//gb << show tree structure;//only for debugging and building the script
segs = Report( gb )[Framebox( 1 )] << Find Segs;
For ( i = 1, i <= n items (segs), i++,
seg = Report( gb )[Framebox( 1 )] << Find Seg( MarkerSeg(i) );
nx = seg << get x values;
ny = seg << get y values;
m = seg << get marker;
c = seg << get colors;
show (nx, ny, m, c);
);
希望這可以幫助。
br
馬爾特
回覆:如何取得圖例框訊息,例如顏色和標記類型你好@MJE ,
感謝您的回饋。 不幸的是,這並不是我感興趣的事情。 用戶實際上並沒有更改行狀態或標記,他們讓圖形生成器自動執行此操作。 但每次進行更改時,顏色和標記都會根據 JMP 的預設值而變化。 我想提取圖形產生器自動執行的標記和顏色“設定”,然後將其應用到 dt,以便它是固定的,並且在對圖形產生器進行更改時不會更新。 我想自動執行此操作,以方便用戶。
我認為它更接近 MarkerSeg 和 <<
我現在正在閱讀它,並嘗試使用下面修改後的程式碼修改腳本索引中的範例。
Names Default To Here( 1 );
dt = Open( "$Sample_Data/Big Class Families.jmp" );
gb = dt << Graph Builder(
Size( 528, 456 ),
Show Control Panel( 0 ),
Graph Spacing( 5 ),
Variables( X( :weight ), Y( :height ), Overlay( :age ), Color( :sex ) ),
Elements( Points( X, Y, Legend( 33 ) ) ),
MarkerSeg(:weight, :height, Row States(dt))
);
gb << show tree structure;//only for debugging and building the script
lgnd = (gb << Report)[FrameBox(1)];
markerseg = (lgnd<<FIND seg=""></FIND>
但是,當我運行它時,我得到以下標記的輸出:{“Dot”,“Dot”,“Dot”,“Dot”,“Dot”,“Dot”,“Dot”,“Dot”}
從我在原始帖子中包含的圖形來看,每個數據點都不是“點”。
謝謝!,
DS
回覆:如何取得圖例框訊息,例如顏色和標記類型你好@SDF1 ,
如果我正確理解您的問題,您可能需要檢查行狀態。
<< copy from row states
和
<< copy to row states
允許您將行狀態資訊(例如顏色、標記等)傳輸到單獨的列中,然後再次傳回行狀態(範例和語法可以在腳本索引中找到)。
br
馬爾特