将图表轴和标题设置为变量大家好,这里是新人:
我在一个过程中处理一组数据,我希望重复很多次,因此我正在尝试尽可能地自动化设置。 目前我正在处理一些数据演示,并且我需要您的帮助来根据单元格的内容使图表的轴标题可变。
作为一个例子,我有以下数据:

根据这些数据,我想绘制一个图表,显示每个“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]);