如何更改 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 中的图例名称(在图形生成器中)?图例框()的脚本索引中的详细信息没有显示允许更改图例中实际标签的消息。 但是,由于图例中的值直接来自数据表中的值,因此您可以简单地更改/重新编码数据表中的值或设置“值标签”列属性。