嗨,我对 JMP 还比较陌生,正在使用双变量图平台从数据集生成双变量图列表。我开始使用自动生成的 JSL 脚本为所有图添加相同的轴和图例设置,如下所示:
Bivariate(
Y( :PeakValue ),
X( :"Duration (s)"n ),
By( :Checker Name ),
SendToReport(
Dispatch(
{},
"Duration (s)",
ScaleBox,
{Scale( "Log" ), Format( "Engineering SI", 9 ), Min( 0.0000000001 ),
Max( 0.001 ), Inc( 1 ), Minor Ticks( 1 ),
Label Row(
{Show Major Grid( 1 ), Show Minor Grid( 1 ), Show Minor Labels( 0 )}
)}
),
Dispatch( {}, "PeakValue", ScaleBox, {Label Row( Show Major Grid( 1 ) )} ),
Dispatch(
{},
"Bivar Plot",
FrameBox,
{Marker Drawing Mode( "Normal" ),
Row Legend(
Corner,
Color( 1 ),
Color Theme( "JMP Default"(1) ),
Marker( 0 ),
Marker Theme( "" ),
Continuous Scale( 0 ),
Reverse Scale( 0 ),
Excluded Rows( 0 )
)}
)
)
);
如上所示,我按列 :Checker Name 对数据集进行分组。但是,我想通过添加透明的 Rect() 图形对象来扩展此脚本,以便为每个散点图创建可接受的范围。但是,这些 Rect() 对象的尺寸和位置将根据其绘制在哪个双变量图中而有所不同。简而言之,我需要创建一个 :Checker Name 到 Rect 大小变量的键,该键将根据集合中的双变量图正确应用。这是否容易/合理地纳入我上面的预生成脚本中?
谢谢你!
您可以尝试在 JMP 中以交互方式执行此操作(您很可能必须将 Rect() 值硬编码到每个散点图中)。我建议使用带循环的 JSL。
您建议我如何将具有 By(:Checker Name) 的双变量函数拆分为具有唯一 Checker Names 的双变量循环?
-雅各布
将引用列表保存到变量中:biv = Bivariate( ... )。您可以迭代列表。您可以查询大纲框来确定按变量级别,也可以使用 Summarize() 函数获取组列表。它将按相同的顺序排列。
我正在考虑使用关联数组为 Checker Name 列中的每个可能键分配一个 rect 对象。您能否提供一个遍历轮廓框列表并向每个轮廓框添加 rect() 对象的示例?我对 Summarize 函数也不熟悉。
我假设你正在使用 JMP18。当你使用 By 时,你会得到一个平台列表,然后你可以循环遍历它。然后只需要弄清楚如何获取标题等等(或者你可以使用 Summarize,在这种情况下,我会以稍微不同的方式构建参考列表)。如果很难弄清楚循环,你可以先创建单个双变量平台并使其工作,然后扩展到循环
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
aa_rect = Associative Array();
aa_rect["M"] = Expr(Rect(80, 60, 120, 55));
aa_rect["F"] = Expr(Rect(90, 65, 140, 55));
bivs = dt << Bivariate(Y(:height), X(:weight), By(:sex));
For Each({cur_biv}, bivs,
ob = Report(cur_biv)[OutlineBox(1)];
obtitle = ob << get title;
show(obtitle);
category = Word(-1, obtitle, "=");
fb = ob[FrameBox(1)];
Eval(EvalExpr(
fb << Add Graphics Script(
Pen Color("Blue");
Pen Size(2);
Expr(aa_rect[category]);
)
));
);
