帶有行狀態標記和顏色的強制圖例你好,
我正在嘗試用標記和顏色製作圖例,但我想選擇它們。 我認為由於行狀態(顏色狀態、標記狀態、組合狀態),這會很容易。 但是,一旦將顏色和標記分配給每一行,我就無法找到一種方法將它們強制添加到圖例中。
我想透過腳本來完成它(我想添加一個帶有圖例的框),但我無法找到一種方法來處理我創建的「標記」。
謝謝
回覆:帶有行狀態標記和顏色的強制圖例謝謝伊恩,
它更接近我最初的想法,並且很容易整合到我的腳本中。
所以我稍微喜歡這個解決方案,儘管另一個方案效果很好。
回覆:帶有行狀態標記和顏色的強制圖例我還沒有弄清楚如何使用腳本來做到這一點,但是如果您轉到“行”>“顏色”或“按列標記”
你會得到以下結果

現在您可以右鍵單擊圖例並將其變更為您想要的任何內容,如果您選擇了“使用圖例建立視窗”,它將為您建立圖例。 這樣做的另一個好處是可以在表中選擇您在圖例中選擇的任何內容。
您可以使用以下命令在內部腳本中執行相同的操作:
Names Default to here(1);
dt = Open("$SAMPLE_DATA\Big CLass.jmp");
legend = dt << Marker By Column(:age);
new window("Not Really",
Hlistbox(
bivariate(Y(:height), X(:weight)),
legend
)
)
但是你失去了(至少我還沒找到方法)你所追求的可自訂性
回覆:帶有行狀態標記和顏色的強制圖例作為替代方案,您可以考慮使用“MarkerSeg”。 在下面的程式碼中,「dt」是一個表格,其中包含您想要著色和標記的列的所有不同層級。 您可以使用“表格>摘要”並將其設定為不可見。
NamesDefaultToHere(1);
// Example data table (markers and colors assigned by 'Lot ID')
dt = New Table( "Rows With Colors and Markers",
Add Rows( 12 ),
New Column( "Lot ID",
Character,
"Nominal",
Set Values(
{"lot1", "lot10", "lot11", "lot12", "lot13", "lot2", "lot3", "lot4",
"lot5", "lot6", "lot7", "lot8"}
),
Lock( 1 )
),
Set Row States(
[896.813481688499, 1104.17848521471, 34064.2516910434, 1584.79095828533,
1856.1745531559, 34848.5869575739, 35120.7292968035, 2704.17450988293,
2976.75480300188, 3200.51829791069, 3408.21706777811, 36368.77437675]
)
);
// Make legend window with MarkerSeg
n = NRow(dt);
xx = J(n, 1, 1);
yy = Transpose(1::n);
legendList = Column(dt, "Lot ID") << getValues;
gb = Graph Box(
FrameSize( 150, 300*(n/16) ),
Y Scale( 0, n+1 ),
X Scale( 0, 6 ),
Y Name(" "),
X Name(" "),
Y Axis(ShowLabels(0), ShowMajorTicks(0), ShowMinorTicks(0)),
X Axis(ShowLabels(0), ShowMajorTicks(0), ShowMinorTicks(0)),
Marker Seg( xx, yy, Row States( dt ) ),
For( i = 1, i<=n, i++, Text( {1.5, i-0.1}, legendList[i] ) )
);
db = PanelBox("Row State Colours and Markers for 'Lot ID'", gb);
New Window( "My Legend", db);
回覆:帶有行狀態標記和顏色的強制圖例這似乎是一個很好的解決方案。 我現在需要將其適應我的情況。 多謝!
只是對行狀態感到失望!
回覆:帶有行狀態標記和顏色的強制圖例如果你看
幫助==>腳本索引
並查看圖形產生器和圖例框()元素,在圖形產生器運行後操作圖例是有限的。 但是,您可以使用適用於任何情況的技術,但有點麻煩。 如果您產生一個文字字串,其中包含讓圖形產生器執行您想要的操作所需的程式碼,則您可以執行該文字字串。 這是一個非常原始的例子,但我想你會看到你可以用它做什麼樣的事情
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\big class.jmp" );
Summarize( dt, groups = by( dt:sex ) );
numofgroups = N Items( groups );
TheCode =
"Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 1 ) ) ),
SendToReport(
Dispatch(
{},
\!"400\!",
ScaleBox,
{Legend Model(
1,";
For( i = 0, i <= numofgroups - 1, i++,
Show( i );
TheCode = TheCode || "Properties(" || Char( i ) || ", {Line Color (" || Char( i + 3 ) || "),Marker( " || Char( 16 - i ) || ")}),";
);
TheCode = TheCode || "Dispatch( {}, \!"400\!", LegendBox, {Legend Position( {1, [2, 3], 1, [0, 1]} ), Position( {2, 3, 0, 1} )} ))';";
Eval( Parse( TheCode ) );回覆:帶有行狀態標記和顏色的強制圖例謝謝吉姆
1.我同意這不是一個真正的問題... 我可以透過一些工作得到清單!
2.可能是我說得不夠清楚。 正如您所提到的,我可以輕鬆地獲取圖例中需要修改的項目的數量(N)。 這意味著我需要在製作 graphbuilder 的腳本中建立 N 行(我需要使用「legend box(properties(0...N)」)調度 N 行)。 但是,如果我在圖例框中建立一個包含 N+1 行的圖表,它將部分工作(第 N+1 行不會被修改)。 因此,我需要在製作圖形構建器的腳本內(是否可行?)或在製作圖形構建器的腳本之後創建一個循環(這更有意義,但我無法找到可以發送到 legendbox 的消息) 。
回覆:帶有行狀態標記和顏色的強制圖例1. 標記的編號如下圖所示。 這是由腳本產生的,如腳本指南所示
幫助==>書籍==>腳本指南

有些標記已指派名稱,您可以在圖形產生器腳本中看到這些名稱。 我不知道這些名稱的任何列表,但您始終可以交互地運行圖形生成器並分配所需的標記,然後查看它生成的腳本,看看它是否為您提供了一個名稱而不僅僅是一個數字。
2. 圖例將以字母或數字順序列出,除非開啟「值排序」或「行順序層級」。 您可以透過程式設計來確定這一點,然後調整您的程式碼。 至於找出資料表中的年齡,我最常使用 Summarize() 函數
總結(dt,按組別=按(:年齡));
變數“bygroup”將包含找到的所有不同年齡的清單。
N 項(按組);
為您提供找到的不同年齡的數量
回覆:帶有行狀態標記和顏色的強制圖例感謝你及時的答复,
1/ 只要我有完整的標記名稱集(我在文件中找到了標準 JMP 顏色),它就可以工作。 你知道我在哪裡可以找到與標記名稱等效的內容嗎?
2/ 在這種情況下,如果顏色和標記寫在專用表中,我可以透過 (eval(substitute(expr(graphbuilder(color1,marker1),expr(color1),mycolor, expr(標記1),我的標記)))。 它有效,向前邁出了很好的一步,但我需要知道圖例中的項目數量才能進行替換。
為了讓「大類」檔案更清楚,如果覆蓋是用 :AGE 製作的,並且如果我不知道檔案中的 AGE,我該怎麼辦?
如果我能夠向圖例框發送訊息,我也許可以循環執行此操作(在圖形生成器之後)。 但我在文件訊息中找不到修改該項目的資訊...最後樹節點在 legendbox 節點中為「空」。
回覆:帶有行狀態標記和顏色的強制圖例我發現 JMP 處理此問題的最簡單方法是修改圖例,從而使用 JSL 修改圖形,以符合您的行狀態。 以下腳本展示如何在圖形產生器中修改圖例。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\big class.jmp" );
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 1 ) ) ),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
1,
Properties( 0, {Marker( "FilledTall" )} ),
Properties( 1, {Line Color( 1 ), Line Style( "Dashed" ), Marker( "Filled Diamond" )} )
), Legend Model(
1,
Properties( 0, {Marker( "FilledTall" )} ),
Properties( 1, {Line Color( 1 ), Line Style( "Dashed" ), Marker( "Filled Diamond" )} )
)}
),
Dispatch( {}, "400", LegendBox, {Legend Position( {1, [2, 3], 1, [0, 1]} ), Position( {2, 3, 0, 1} )} )
)
);
它產生以下內容
