通过按键切换图形生成器中主要网格线的可见性我想配置一个加载项来切换图形生成器中主要网格线(X 和 Y)的可见性,但我正在努力处理 JSL 部分......我有 GB 对象和 SendToReport( .. 调度...代码,但它似乎想要与 X 和 Y 轴关联的变量名称,而我的外接程序不知道这些是什么。
这可行吗?
这是我到目前为止所拥有的:
// steps to get last_gb scriptable object...<BR /><BR />// send setting change<BR />last_gb << SendToReport(
Dispatch(
{},
"myXaxis",
ScaleBox,
{ Label Row (Show Major Grid( not(Label Row (Show Major Grid ) ) ) ) ) }
),
Dispatch(
{},
"myXYaxis",
ScaleBox,
{ Label Row (Show Major Grid( not(Label Row (Show Major Grid ) ) ) ) ) }
)
)数据探索和可视化回复:通过按键切换图形生成器中主要网格线的可见性你好@BHarris ,
使用轴框来显示主网格怎么样?
如果你想使用send来报告消息,一种想法是使用getvariable消息来获取变量。
// #1 Example for Axis Box
gb_rpt = gb_ob << Report();
gb_rpt[axis box( 1 )] << Show Major Grid( 1 );
gb_rpt[axis box( 2 )] << Show Major Grid( 1 );
// #2 Example for send to report
var1 = gb_ob << Get Variable( 1 );
var2 = gb_ob << Get Variable( 2 );
Eval(
Substitute(
Expr(
gb_ob << send to report(
Dispatch(
{},
_var_,
ScaleBox,
{Label Row( Show Major Grid( 1 ) )}
)
)
),
Expr( _var_ ), Eval( Char( var1[1] ) )
)
);
我希望它能解决你的问题。
回复:通过按键切换图形生成器中主要网格线的可见性这已经非常接近了!我希望脚本在运行时打开和关闭网格状态,但这只能打开网格。我只花了大约一个小时试图弄清楚如何从 AxisBox 读取网格状态,但是当我深入到“标签行”时,文档变得非常稀疏......
如何读取主电网的当前状态?
回复:通过按键切换图形生成器中主要网格线的可见性可能有更好的方法,但您可以尝试的一个选择是将 << get 脚本发送到 axisbox 并从中获取显示主要网格。 如果根本不可见,那么您应该能够从用户属性中获取值
axis_script = axisbox << get script();
cur_gridvalue = Try(
axis_script["Label Row"]["Show Major Grid"];
Print("Grid");
, // not found
Arg(Arg(Get Preference(Major Grid Lines)));
Print("Preference");
);
回复:通过按键切换图形生成器中主要网格线的可见性更近了!现在,它会关闭第一个 x 轴和第一个 y 轴框的网格线,但不是多轴图上的所有轴框:

如何迭代所有轴框?这是我到目前为止所拥有的:
Names Default To Here( 1 );
win = Get Window List();
//Find graph builder windows
graphs = Filter Each({w}, win,
If(Length(w << XPath("//OutlineBox[@helpKey='Graph Builder']")) > 0, 1, 0)
);
gb = graphs[N Items(graphs)][OutlineBox("Graph Builder")] << Get Scriptable Object;
gb_rpt = gb << Report();
gb_axis1 = gb_rpt[AxisBox( 1 )];
gb_axis2 = gb_rpt[AxisBox( 2 )];
axis_script = gb_axis1 << get script();
cur_gridvalue = Try(
axis_script["Label Row"]["Show Major Grid"], // not found
Arg( Arg( Get Preference( Major Grid Lines ) ) )
);
If( cur_gridValue,
gb_axis1 << Show Major Grid( 0 );
gb_axis2 << Show Major Grid( 0 );
,
gb_axis1 << Show Major Grid( 1 );
gb_axis2 << Show Major Grid( 1 );
);(诗。我永远不会自己弄清楚“get script”或“arg( arg(”)。我觉得我是一个有 25 年经验的半称职的脚本编写者,但我仍然对 JSL 感到很迷失——很多时候很难说出它在做什么。)
回复:通过按键切换图形生成器中主要网格线的可见性您可以使用 << XPath 获取所有 AxisBox 引用,然后循环遍历它们并一一修改它们,或者向所有引用发送相同的消息。 这可能需要一些额外的检查,以免修改您不想更改的任何轴箱。
axisboxes = gb_rpt << XPath("//AxisBox");
<< 当您检查 AxisBox 中是否有任何特定内容可以帮助您缩小引用范围(charID 可能是一个)时,获取 XML 可能会有所帮助。 然后,您可以修改 XPath 查询以使用它并使其更加准确。

回复:通过按键切换图形生成器中主要网格线的可见性就这样做到了!对于需要脚本来打开/关闭图形生成器中所有绘图中的网格线的任何人来说,这是解决方案:
Names Default To Here( 1 );
win = Get Window List();
//Find graph builder windows
graphs = Filter Each( {w}, win,
If( Length( w << XPath( "//OutlineBox[@helpKey='Graph Builder']" ) ) > 0,
1,
0
)
);
gb = graphs[N Items( graphs )][Outline Box( "Graph Builder" )] << Get Scriptable Object;
gb_rpt = gb << Report();
gb_axis1 = gb_rpt[AxisBox( 1 )];
axis_script = gb_axis1 << get script();
cur_gridvalue = Try(
axis_script["Label Row"]["Show Major Grid"], // not found
Arg( Arg( Get Preference( Major Grid Lines ) ) )
);
axisboxes = gb_rpt << XPath( "//AxisBox" );
For Each( {anAxisBox,anIndex}, axisboxes,
If( cur_gridValue,
anAxisBox << Show Major Grid( 0 ),
anAxisBox << Show Major Grid( 1 )
)
);感谢 Jarmo 和 Yuichi 的帮助!
******************************************
附注我根本不理解“<< Get XML”提示——我尝试将它放在 4 个不同的位置,但从未得到任何带有“”的 XML(尽管我确实得到了很多 XML ...... .)。您是如何将 JSL 脚本学得如此出色的?
回复:通过按键切换图形生成器中主要网格线的可见性我只是通过编写脚本来学习脚本(我编写脚本的方式是尝试很多不同的东西,阅读文档(对于 JSL 通常按此顺序:脚本索引、脚本指南、JMP 社区、JSL 语法参考)并尝试更多的东西,失败了很多,但最终我几乎总是设法得到某种可行的解决方案)。
我认为您可以将 << get xml 发送到 jmp 对象的分析层或报告层。 有时,您甚至可以通过首先添加下标然后使用 << get xml 来更接近正确的引用,但在这种情况下,我只是将其发送到 gb。 下面是 Big Class.jmp 的其他示例,之后我将其放入您的脚本中。 通常我清除日志,运行 << get xml line,单击日志,然后使用 ctrl+f 搜索某些内容(如果我知道我在寻找什么)。 如果您必须探索一些非常大的 XML,将 xml 保存为 .xml 文件并使用某些具有 xml 语法突出显示功能的应用程序打开它可能会有所帮助(notepad++ 通常就足够了)。

Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << Select Rows([1, 2]) << Hide and Exclude(1) << Clear Select;
gb = dt << Graph Builder(
Size(528, 456),
Show Control Panel(0),
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Smoother(X, Y, Legend(10)))
);
// Report(gb) << Get Xml; // works also on report
gb << Get XML; // run just this line to see xml in log or use Write() (write is the cleanest option)
// Write(gb << Get XML);
// xml_str = gb << get xml;
// show(xml_str);
where_tb = Report(gb) << XPath("//TextBox[contains(text(), 'Where(')]");
where_tb << Text Color("Blue"); // usually used to hide where text << Set Visibility("Collapse");
这里是我将 << Get XML 放入脚本中的位置,运行一次,检查 xml,然后从代码中删除该行,因为通常没有必要将 << Get XML 留给现成的脚本。
