將圖表軸和標題設置為變量大家好,這裡是新人:
我在一個過程中處理一組數據,我希望重複很多次,因此我正在嘗試盡可能地自動化設置。 目前我正在處理一些數據演示,並且我需要您的幫助來根據單元格的內容使圖表的軸標題可變。
作為一個例子,我有以下數據:

根據這些數據,我想繪製一個圖表,顯示每個“Col A”值的“Res”,以及一系列顯示“Ref”的參考線(及其邊界條件“+/-uref”和“rob”及其邊界條件“+/- urob”。
目前腳本如下:
dt = Current Data Table();
Graph Builder(
Size( 743, 472 ),
Show Control Panel( 0 ),
Variables(
X( :COLA, Order By( :Res, Ascending, Order Statistic( "Mean" ) ) ),
Y( :Res ),
Interval( :Ures )
),
Elements( Points( X, Y, Legend( 7 ) ) ),
SendToReport(
Dispatch(
{},
"COLA",
ScaleBox,
{Label Row(
{Label Orientation( "Vertical" ), Set Font Size( 12 ),
Set Font Style( "Italique" )}
)}
),
Dispatch(
{},
"Res",
ScaleBox,
{Min(), Max(), Inc(), Minor Ticks( 1 ),
Add Ref Line( dt[1, 11], "Solid", "Dark Blue", "", 1 ),
Add Ref Line( dt[1, 9], "Dotted", "Dark Blue", "", 1 ),
Add Ref Line( dt[1, 10], "Dotted", "Dark Blue", "", 1 ),
Add Ref Line( dt[1, 4], "Solid", "Dark Red", "", 1 ),
Add Ref Line( {dt[1, 7], dt[1, 8]}, "Solid", "Medium Dark Red", "", 1, 0.15 ),
Add Ref Line( dt[1, 7], "Dotted", "Dark Red", "", 1 ),
Add Ref Line( dt[1, 8], "Dotted", "Dark Red", "", 1 )}
),
Dispatch( {}, "graph title", TextEditBox, {Set Text( "Analyte res" )} ),
Dispatch( {}, "X title", TextEditBox, {Set Text( "COLA" )} ),
Dispatch( {}, "Y title", TextEditBox, {Set Text( "Units of Res (g/m3)" )} ),
Dispatch( {}, "400", LegendBox, {Legend Position( {7, [-1, -3]} )} )
)
);
它工作正常並且足夠靈活,能夠根據需要根據單元格值修改圖表中的參考線。
現在,我還希望標題能夠執行與參考線相同的操作。 因此,理想情況下,我可以在 jmp 表中添加一個初始列,我們將其稱為“信息”,其中包含有關所研究的分析物的信息(名稱、用於測量的單位等...),並且我想要圖表的標題(和軸)從這些單元格中提取信息(就像參考線當前所做的那樣)並在文本中使用此信息。
例如,如果在我的“信息”列中我有“Zr4+”,我希望最終的圖形去查找該單元格並使用它來標記其自身或其軸之一。這樣我就可以將單元格更改為“Br7-”,下次運行腳本時,新圖表將標有“Br7-”。
是否有可能做到這一點?
如果變量可以插入較長的文本,例如 y 軸為“Zr 4+ (mg/l)”,然後更改為“Br7- (mg/l)”,則加分
大規模定制視窗回复:將圖表軸和標題設置為變量這次真是萬分感謝,
我會按照你說的做並閱讀指南。 事實上,我使用 JSL 的工作是我一生中第一次真正完成腳本/編碼,因此我仍然需要學習很多特定的邏輯!
回复:將圖表軸和標題設置為變量您似乎遇到的問題是如何向 TextEditBox() 提供正確語法的元素。
在腳本索引中找到的“設置文本”規範是:

所以基本上,必須提供的是一個“字符串”。在 JSL 中,幾乎任何東西都可以放入字符串中。從示例腳本中的示例
gbr[TextEditBox(1)] << set text(column(dt,"info")[1]);
“info”列第一行的值被發送到 TextEditBox(),並且由於“Indo”列具有字符建模類型,因此每個單元格中的值都是“字符串”。
JSL 允許以多種不同的方式構建字符串。我強烈建議您花時間閱讀 JMP 文檔庫中的腳本指南,該指南位於“幫助”下拉菜單下。
但為了簡單說明,如果您想要“圖 5 分析結果”,則可以簡單地表示為
gbr[TextEditBox(1)] << set text( "Graph 5 " || column(dt,"info")[1]);
其中傳遞給 TextEdibox() 的字符串是由字符串“Graph 5”與 Info 列第一行單元格中的字符串連接而成的字符串。
回复:將圖表軸和標題設置為變量你好吉姆,
我對腳本和軸標題進行了更多的研究。
您提供的解決方案對於基本內容非常有用,我想知道是否有一種方法可以在“設置文本”部分中引入可變元素和固定元素。
最終,從您幫助我處理的腳本中,我提取了三到四個不同的圖表,現在我希望每個圖表的標題從一個單元格中提取文本並將其合併到另一個文本中(來自另一個單元格,或直接寫入)進入劇本,我並不挑剔。
為了解釋一下,目前我的圖表的標題將最終為“分析物分辨率”(這已經比我之前的位置領先了很多),我想更進一步,得到類似“圖 5:[分析物” res]”,這樣我只需更改“分析物 res”部分,它就會更改標題。以類似的方式,如果能夠將 y 軸標記為“[分析物] [測量的數量(質量、濃度、體積,...)] [單位(g、mg/L、cm3...),那就太好了。 )]" 這樣我就可以根據我對每個不同圖表的需要更改所選單元格中的三個變量中的每一個。
我已經嘗試過“設置文本”參數,但它似乎並不像這樣的混合系統(甚至從多個單元格中提取)。所以我最有希望的解決方法就是在標題和 y 軸旁邊添加一個文本框,儘管這當然不是一個優雅的解決方案,而且我懷疑在某些情況下我需要小心不要引起兩個文本框之間的重疊。 ...
有任何想法嗎?
回复:將圖表軸和標題設置為變量)親愛的吉姆,謝謝你,這很有效!
回复:將圖表軸和標題設置為變量我在您的數據表中添加了一個新的信息列

並修改您的腳本以使用它來獲取標籤的值。我還修改了您的腳本,以使用更直接的方式將參考線添加到圖表中。

Names Default To Here( 1 );
dt = Current Data Table();
gb = dt << Graph Builder(
Size( 743, 472 ),
Show Control Panel( 0 ),
Variables( X( :COLA, Order By( :Res, Ascending, Order Statistic( "Mean" ) ) ), Y( :Res ), Interval( :Ures ) ),
Elements( Points( X, Y, Legend( 7 ) ) ),
SendToReport(
Dispatch( {}, "COLA", ScaleBox, {Label Row( {Label Orientation( "Vertical" ), Set Font Size( 12 ), Set Font Style( "Italique" )} )} ),
Dispatch( {}, "Res", ScaleBox, {Min(), Max(), Inc(), Minor Ticks( 1 )} ),
Dispatch( {}, "400", LegendBox, {Legend Position( {7, [-1, -3]} )} )
)
);
gbr = gb << report;
gbr[AxisBox( 2 )] << Add Ref Line( dt[1, 11], "Solid", "Dark Blue", "", 1 );
gbr[AxisBox( 2 )] << Add Ref Line( dt[1, 9], "Dotted", "Dark Blue", "", 1 );
gbr[AxisBox( 2 )] << Add Ref Line( dt[1, 10], "Dotted", "Dark Blue", "", 1 );
gbr[AxisBox( 2 )] << Add Ref Line( dt[1, 4], "Solid", "Dark Red", "", 1 );
gbr[AxisBox( 2 )] << Add Ref Line( {dt[1, 7], dt[1, 8]}, "Solid", "Medium Dark Red", "", 1, 0.15 );
gbr[AxisBox( 2 )] << Add Ref Line( dt[1, 7], "Dotted", "Dark Red", "", 1 );
gbr[AxisBox( 2 )] << Add Ref Line( dt[1, 8], "Dotted", "Dark Red", "", 1 );
gbr[TextEditBox(1)] << set text(column(dt,"info")[1]);
gbr[TextEditBox(3)] << set text(column(dt,"info")[2]);
gbr[TextEditBox(4)] << set text(column(dt,"info")[3]);