如何更改 JSL 中的圖例名稱(在圖形生成器中)?我在 CSV 文件中獲取了大量數據(許多列、許多行),並且正在使用 JSL 中的基本模板來標準化圖形的生成。 (重新縮放軸、重命名軸、標準化線條的顏色等......) 平均而言,我每天可以獲得一個 CSV 文件,因此我想將數據放入 JMP 數據表中,運行腳本並自動輸出圖形。
默認情況下,我的 JMP 文件將標籤名稱作為列標題,而這些標題根本不像圖形圖例那樣提供信息。 一種解決方法可能是重命名所有列,但我更願意保留標籤名稱,因此直接操作圖例設置中的文本。 (但是是用 JSL 完成的,而不是手動完成的。)
我可以輕鬆訪問圖例框,例如:
gbR = gb << Report; // gbR << Show Tree Structure;
s = gbR[legendbox(1)];
s << Set Title("new title");在所附的 PNG 中您可以看到這個想法。
我現在遇到的問題是如何訪問圖例框中的文本(標題除外),以便我可以使用 JSL 對其進行操作和更改。
我看到圖形生成器生成的腳本提到了“圖例模型”和“關卡名稱”,但我在嘗試過的許多事情中都沒有成功。
對此的任何指導將不勝感激。
如前所述,使用 JSL,如何訪問圖例文本以將其更改為默認值?
謝謝。
大規模定制回复:如何更改 JSL 中的圖例名稱(在圖形生成器中)?願這暴力破解腳本從@tx尼爾森可能會幫助您對級別項目文本執行類似的操作。 該線程中的腳本討論不顯示某些傳奇項目,但您可以在關卡項目的表達式中使用類似的策略。
回复:如何更改 JSL 中的圖例名稱(在圖形生成器中)?我認為如果您想通過腳本來完成此操作,則需要完全按照這種方式(使用表達式)執行此操作。 您可能想要保存圖形的腳本,解析括號之間輸入的級別名稱並提取並替換它們。 然後重新填充/重新運行修改後的腳本。 這樣,您將能夠擁有一個非常通用的腳本,該腳本對要更改的內容做出反應,而不是每次都為每個場景手動定義。 然而,還有更多工作要做。
可用的圖例屬性似乎沒有文本屬性:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = dt << Graph Builder(
Variables( X( :age ), Y( :height ), Y( :weight, Position( 1 ) ) ),
Elements( Line( X, Y( 1 ), Y( 2 ), Legend( 4 ) ) )
);
r = Report( gb )[LegendBox( 1 )];
r << get properties();
/*
["Background Color" => 2147483647,
"Border" => {Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}, "Enabled" => 1,
"Horizontal Alignment" => "Default",
"Margin" => {Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}, "Padding" => {Left( 0 ),
Top( 0 ), Right( 0 ), Bottom( 0 )}, "Text Color" => 2147483647,
"Vertical Alignment" => "Default",
"Visibility" => "Visible"]
*/
如果你使用
r << legend settings
您將看到一個窗口,該窗口阻止 JMP 中的任何操作,直到您按確定/取消按鈕。 因此您無法訪問該窗口的內部部分。 另一件讓我更加懷疑這是否可能的事情是,圖例的樹結構仍然顯示“Mean(...)”,無論是否手動更改。 所以看起來在初始標籤的頂部隱藏著一些東西。 或者還有什麼其他原因...
請添加一個願望清單註釋,因此可以使用 JSL 更改圖例文本。此外,您可能還想將其發送給技術支持( support@jmp.com )。 請不要忘記解釋原因,因為這會增加獲得更高優先級的機會。 謝謝
回复:如何更改 JSL 中的圖例名稱(在圖形生成器中)?對不起。 這是 JMP 16 中的一項新功能。 我沒有意識到它剛剛被添加並且在 JMP 15 中不可用。 在 JMP 16 可用之前,您必須嘗試第一種方法。 我再次對錯誤信息表示歉意。
回复:如何更改 JSL 中的圖例名稱(在圖形生成器中)?親愛的保羅,
在附加的 PNG 中,您可以看到圖形生成器的輸出,我在使用和不使用語法的情況下運行語法
lgnd = gb << Get Legend Display;
item1 = lgnd << Get Item( 4, 1 );
item1 << Set Label("Line 1");
item2 = lgnd << Get Item( 4, 2 );
item2 << Set Label("Line 2");我在圖例的文本中沒有看到任何不同,我遵循您的語法邏輯,但沒有看到它的任何效果。
在第二個 PNG 中,您可以看到我在執行完整語法後會看到的內容。
如果您仍然可以調查此問題並讓我知道一種方法,我將非常感激。 謝謝,斯科特。
回复:如何更改 JSL 中的圖例名稱(在圖形生成器中)?這是另一種可能性:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = dt << Graph Builder(
Variables( X( :age ), Y( :height ), Y( :weight, Position( 1 ) ) ),
Elements( Line( X, Y( 1 ), Y( 2 ), Legend( 4 ) ) )
);
lgnd = gb << Get Legend Display;
item1 = lgnd << Get Item( 4, 1 );
item1 << Set Label("Line 1");
item2 = lgnd << Get Item( 4, 2 );
item2 << Set Label("Line 2");
獲取項目中的第一個數字是圖形生成器中圖例參數的值。 第二個數字將成為該圖例的索引。 有時要獲得正確的數字可能很困難,因為我們並不總是顯示所有圖例。 如果您想查看圖例的完整列表,請轉到圖例設置。
回复:如何更改 JSL 中的圖例名稱(在圖形生成器中)?謝謝。 是的,當然有可能。 我想我需要一個變量來捕獲圖例文本所需的名稱,因為我有不同的圖表?
例如,按照示例圖形生成器語法:
_Legend1 = "abcd";
_Legend2 = "efgh";
如果是這樣,我是否需要使用下面的內容來管理變量的使用?
Eval(
Substitute(
Expr(
最後,此選項可能是實現更“直接”操作圖例文本的唯一方法嗎?
回复:如何更改 JSL 中的圖例名稱(在圖形生成器中)?是否可以在圖形生成器腳本中執行類似的操作:
Graph Builder(
Variables( X( :age ), Y( :height ), Y( :weight, Position( 1 ) ) ),
Elements( Line( X, Y( 1 ), Y( 2 ), Legend( 4 ) ) ),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
4,
Level Name( 0, "abcd", Item ID( "Mean(height)", 1 ) ),
Level Name( 1, "efgh", Item ID( "Mean(weight)", 1 ) )
)}
),
Dispatch( {}, "400", LegendBox, {Set Title( "My Title" )} )
)
);回复:如何更改 JSL 中的圖例名稱(在圖形生成器中)?感謝您確認我沒有錯過任何顯而易見的事情。
不幸的是,我沒有看到(或無法看到)“價值標籤”如何能夠實現我想要實現的目標。 在某種程度上,我的目標是有效地修改列名稱,而不是操縱在列標題下方的行中找到的數據值。
如果我製作一個簡單的表格,其中圖例中的文本中的一些值會發生變化,如果我對給定列使用“設置名稱”,例如“Column(dt, 1) << Set Name("New name");”這一行語法導致第 1 列數據的文本更新並成為“新名稱”。
我的實際數據圖表具有“平均值(...標籤名稱...)”類型的圖例文本。 如果將 << Set Name 與我的實際數據一起使用,我仍然會遇到有問題的圖例文本,因為它包含“Mean(...列名稱...)”。
任何關於如何操作給定列的圖例文本的想法都會很高興知道。 也許我只是從頭開始製作一個圖例,因此這樣一個“自製”圖例中的所有屬性都是可訪問和可操作的。 我希望它是腳本化的東西,而不是每次我製作新圖表(可能每天)時都需要手動注意的東西。
回复:如何更改 JSL 中的圖例名稱(在圖形生成器中)?圖例框()的腳本索引中的詳細信息沒有顯示允許更改圖例中實際標籤的消息。 但是,由於圖例中的值直接來自數據表中的值,因此您可以簡單地更改/重新編碼數據表中的值或設置“值標籤”列屬性。