在图形生成器中绘制的列可以使用列名称类别按 PAGE 分隔吗?下面的脚本在图形生成器中绘制了几列(Y 轴上的多个参数),列名称以 P 开头。 我想同时绘制下一页中列名以 N 开头的其他一些列(在下面的脚本中注释了命令)。
在下一页中,我想绘制一些其他列,列名称以 V 等开头。
列类别信息可以在单独的数据表或任何其他形式(也许是列表)中预定义(我对此很灵活)。 问题是这是否可以通过 JSL 实现,如果可以,如何实现?
Names Default To Here (1);
clear log ();
dt = open( "$SAMPLE_DATA\semiconductor capability.jmp" );
dt << Ungroup Columns();
Graph Builder(Size( 1469, 718 ),
Variables(X( :lot_id ), Y( :PLG2 ), Y( :PNP4 ), Y( :PNP3 ), Y( :PNP2 ), Y( :PNP1 )),
//Page(:ColumCategory)
Elements( Position( 1, 1 ), Box Plot( X, Y, Legend( 14 ) ) ),
Elements( Position( 1, 2 ), Box Plot( X, Y, Legend( 12 ) ) ),
Elements( Position( 1, 3 ), Box Plot( X, Y, Legend( 11 ) ) ),
Elements( Position( 1, 4 ), Box Plot( X, Y, Legend( 9 ) ) ),
Elements( Position( 1, 5 ), Box Plot( X, Y, Legend( 10 ) ) ),
);
自动化和脚本编写视窗回复:可以使用列名称类别通过 PAGE 在图形生成器中绘制列吗?页面用于基于行的分组,因此它不能用于您想要执行的操作。 您可以为每个组提供一个列列表,然后循环该列表,同时将单独的图形生成器附加到带有 V 列表框的新窗口中。
回复:在图形生成器中绘制的列可以使用列名称类别通过 PAGE 分隔吗?即使重新格式化数据表也无济于事 - 各个 Y 组显示所有项目:

如果只是分割列子组,您可以使用数据过滤器代替页:

Names Default To Here (1);
clear log ();
dt = open( "$SAMPLE_DATA\semiconductor capability.jmp" );
dt << Ungroup Columns();
dtstacked = dt << Stack(
columns(
:NPN1, :PNP1, :PNP2, :NPN2, :PNP3, :IVP1, :PNP4, :NPN3, :IVP2, :NPN4, :SIT1,
:INM1, :INM2, :VPM1, :VPM2, :VPM3
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
"Non-stacked columns"n( Keep( :lot_id, :wafer, :Wafer ID in lot ID, :SITE ) )
);
dtstacked << new column("first_Label", Formula( Left( :Label, 1 ) ));
dtstacked << Graph Builder(
Size( 571, 449 ),
Show Control Panel( 0 ),
Fit to Window,
Variables(
X( :lot_id ),
Y( :Data ),
Page( :first_Label ),
Group Y( :Label ),
Color( :Label )
),
Elements( Box Plot( X, Y, Legend( 16 ) ) ),
Local Data Filter(
Add Filter(
columns( :first_Label ),
Where( :first_Label == "N" ),
Display( :first_Label, N Items( 5 ) )
)
)
)回复:在图形生成器中绘制的列可以使用列名称类别通过 PAGE 分隔吗?@hogi @jthi好的。 谢谢。 另一种想法是放置/发送第一个图形生成器窗口,其中绘制了一组列到日志窗口,下一组新列绘制在第一个列下,依此类推,然后关闭打开的图形窗口和关联的数据表。 如何通过 JSL 执行此操作?
回复:在图形生成器中绘制的列可以使用列名称类别通过 PAGE 分隔吗?创建包含您感兴趣的列的列表列表,并在构建图形生成器并将其附加到日志/ v 列表框中时循环遍历该列表。 所有列的大小是否相同,或者 Y 轴的数量是否发生变化?
回复:可以使用列名称类别通过 PAGE 在图形生成器中绘制列吗?这是一种选择,但这不是您可以使用的唯一选择
Names Default To Here(1);
create_graph = Function({dt, ycollist}, {Default Local},
vlb = V List Box(
gb = dt << Graph Builder(Variables(X(:lot_id)))
);
For Each({colname, idx}, ycollist,
gb << Add Variable({Eval(colname), Role("Y")});
gb << Add Element(1, idx, {Type("Box Plot"), X, Y}); // define boxplots
gb << Remove Element(1, idx, 1); // remove points
);
return(vlb);
);
my_groups = {{"PNP1", "PNP2", "PNP3"}, {"NPN3", "NPN2", "NPN1", "NPN4"}};
dt = Open("$SAMPLE_DATA\semiconductor capability.jmp");
// could also just create journal and add new_vlb to that
nw = New Window("Collector",
vlb = V List Box()
);
For Each({my_group}, my_groups,
new_vlb = create_graph(dt, my_group);
vlb << Append(new_vlb);
);
nw << journal;
nw << Close Window;
my_j = Current Journal();
Write();回复:在图形生成器中绘制的列可以使用列名称类别通过 PAGE 分隔吗?如果每个案例/组有不同的列,则需要添加 JSL 来更改每次更改的“my_group”值。
您可能可以通过在当前的 For Each({my_group) 之外添加一个额外的 For Each() 来实现这一点,在返回到当前的 For Each() 之前,您可以在其中更改 my_group 的值。
我建议您尝试一下,如果您遇到更多问题,请带着更多问题返回社区。
回复:在图形生成器中绘制的列可以使用列名称类别通过 PAGE 分隔吗?@jthi对于每个案例/组,y 轴上绘制的列数会有所不同。
回复:可以使用列名称类别通过 PAGE 在图形生成器中绘制列吗?@jthi @tx尼尔森谢谢。
我的绘图参数按下表分组。 目的是在日志中将每个组附加在其他组的下面。 另外,我希望组条目成为每个条目的图表标题。这种情况下如何修改上面的JSL呢?

回复:在图形生成器中绘制的列可以使用列名称类别通过 PAGE 分隔吗?在您的情况下,我将使用关联数组,其中键是组名称,值是参数列表(列)。 然后在构建日志时使用 For Each 循环此关联数组
回复:可以使用列名称类别通过 PAGE 在图形生成器中绘制列吗?@tx尼尔森@hogi 。 感谢您的建议。 短暂休息后我又回到这个话题。
@jthi在我的 JMP 16.2 中运行这部分脚本
Names Default To Here(1);
create_graph = Function({dt, ycollist}, {Default Local},
vlb = V List Box(
gb = dt << Graph Builder(Variables(X(:lot_id)))
);
For Each({colname, idx}, ycollist,
gb << Add Variable({Eval(colname), Role("Y")});
gb << Add Element(1, idx, {Type("Box Plot"), X, Y}); // define boxplots
gb << Remove Element(1, idx, 1); // remove points
);
return(vlb);
);
my_groups = {{"PNP1", "PNP2", "PNP3"}, {"NPN3", "NPN2", "NPN1", "NPN4"}};
dt = Open("$SAMPLE_DATA\semiconductor capability.jmp");
// could also just create journal and add new_vlb to that
nw = New Window("Collector",
vlb = V List Box()
);
For Each({my_group}, my_groups,
new_vlb = create_graph(dt, my_group);
vlb << Append(new_vlb);
);给出

IE
{"PNP1", "PNP2", "PNP3"} 和
{"NPN3", "NPN2", "NPN1", "NPN4"}没有像我的第一篇文章中提到的那样绘制在 y 轴上(即一个在另一个上方,且规格限制参考线可见),也没有绘制在两个单独的图表上。
如上所述,我的绘图参数按以下单独的表格分组
Names Default To Here( 1 );
dtg = New Table( "Parameter Groups",
Add Rows( 11 ),
New Column( "Parameter", Character, Nominal,
Set Values( {"PNP1", "PNP2", "NPN2", "NPN3", "INV2", "NPN1", "PNP3", "NPN4", "INV3", "PNP6", "INV4"} ) ),
New Column( "Group", Character, Nominal, Set Values( {"DC", "DC", "AC","AC","RF","AC","DC","AC", "RF", "DC", "RF"} ) )
);我希望每个图表中的参数按上表的“组”列中的条目进行分组。
例如,顶部图有一个图块直流和“PNP1”、“PNP2”、“PNP3”和“PNP6”绘制在 y 轴上,其下方是带有标题的下一个图表交流电和“NPN2”、“NPN3”、“NPN1”和“NPN4”绘制,最后第三个图表在底部带有标题“射频”和“INV2”和“INV4 ” 绘制在 y 轴上。
我能否获得有关关联数组方法的一些帮助以继续? 这样我就可以获得独特的团体,但是如何获得关联的参数(使用 Get RowsWhere()) ?
gg = Associative Array (dt:Group);
gg << get keys;
( @jthi ,除了日记之外,我更喜欢您的“收集器”窗口选项,因为它根据我想查看的内容为我们提供了更大的灵活性)
回复:在图形生成器中绘制的列可以使用列名称类别通过 PAGE 分隔吗?使用 JMP 16,我能够重现您所看到的问题。我未能使用“添加变量”等来获得您想要的结果。但是,通过使用在字符串变量中创建 Graph Builder JSL 然后执行的技术,我能够获得箱线图

Names Default To Here( 1 );
create_graph = Function( {dt, ycollist},
{Default Local},
theExpr =
"vlb = V List Box(
gb = dt << Graph Builder(Size( 1469, 718 ),Variables(X(:lot_id)";
For Each( {colname, idx}, ycollist,
theExpr = theExpr || ",Y(:\!"" || colname || "\!"n)"
);
theExpr = theExpr || ")";
For Each( {colname, idx}, ycollist,
theExpr = theExpr || ",Elements( Position( 1," || Char( idx ) ||
" ), Box Plot( X, Y) ) "
);
theExpr = theExpr || ");";
Eval( Parse( theExpr ) );
Return( vlb );
);
my_groups = {{"PNP1", "PNP2", "PNP3"}, {"NPN3", "NPN2", "NPN1", "NPN4"}};
dt = Open( "$SAMPLE_DATA\semiconductor capability.jmp" );
// could also just create journal and add new_vlb to that
nw = New Window( "Collector", vlb = V List Box() );
For Each( {my_group}, my_groups,
new_vlb = create_graph( dt, my_group );
vlb << Append( new_vlb );
);回复:在图形生成器中绘制的列可以使用列名称类别通过 PAGE 分隔吗?@tx尼尔森这在 16.2 中有效(JMP 抱怨语法错误,但仍然绘制图表)。
如果我有另一个清单
paraGroupList = {"DC", "AC"};我该如何分配直流作为图表标题(当前PNP1 和 2 更多与 lot_id )绘图时(上图)
{"PNP1", "PNP2", "PNP3"}和交流电作为图表标题(当前NPN3 及以上 3 个与 lot_id )用于绘制时(下图)?
{"NPN3", "NPN2", "NPN1", "NPN4"}回复:可以使用列名称类别通过 PAGE 在图形生成器中绘制列吗?运行图表。
单击标题并更改它。
然后转到红色小三角并选择保存脚本。
查看脚本,您将看到 JSL 以及它如何更改标题。
将其采用到您的脚本中。
我强烈建议您花时间阅读脚本指南。它将加速您 JSL 的学习
回复:可以使用列名称类别通过 PAGE 在图形生成器中绘制列吗?@tx尼尔森谢谢,我知道如何做图表标题了。
如何突破创建图函数如果ycollist是空的?
回复:在图形生成器中绘制的列可以使用列名称类别通过 PAGE 分隔吗?使用 Length() 函数检查列表是否有任何条目,然后绕过代码;
回复:可以使用列名称类别通过 PAGE 在图形生成器中绘制列吗?@tx尼尔森谢谢。看来我不能使用休息 ()在我的绘图函数中(如果它在 for 循环中使用)。 我会看看我有什么选择。
回复:可以使用列名称类别通过 PAGE 在图形生成器中绘制列吗?只需进行所需的评估,如果不满足,则绕过代码。见下文:
Names Default To Here( 1 );
create_graph = Function( {dt, ycollist},
{Default Local},
theExpr =
"vlb = V List Box(
gb = dt << Graph Builder(Size( 1469, 718 ),Variables(X(:lot_id)";
For Each( {colname, idx}, ycollist,
If( Length( colname ) != 0,
theExpr = theExpr || ",Y(:\!"" || colname || "\!"n)"
);
theExpr = theExpr || ")";
For Each( {colname, idx}, ycollist,
theExpr = theExpr || ",Elements( Position( 1," || Char( idx ) ||
" ), Box Plot( X, Y) ) "
);
theExpr = theExpr || ");";
Eval( Parse( theExpr ) );
);
Return( vlb );
);
my_groups = {{"PNP1", "PNP2", "PNP3"}, {"NPN3", "NPN2", "NPN1", "NPN4"}};
dt = Open( "$SAMPLE_DATA\semiconductor capability.jmp" );
// could also just create journal and add new_vlb to that
nw = New Window( "Collector", vlb = V List Box() );
For Each( {my_group}, my_groups,
new_vlb = create_graph( dt, my_group );
vlb << Append( new_vlb );
);回复:在图形生成器中绘制的列可以使用列名称类别通过 PAGE 分隔吗?@tx尼尔森谢谢。 运行脚本会出现错误(在 JMP 16.2 上),但我无法消除这些错误。

回复:在图形生成器中绘制的列可以使用列名称类别通过 PAGE 分隔吗?抱歉,我急于回复之前的答案。如果 my_group 为空,下面的 JSL 将绕过图形的创建
Names Default To Here( 1 );
create_graph = Function( {dt, ycollist},
{Default Local},
theExpr =
"vlb = V List Box(
gb = dt << Graph Builder(Size( 1469, 718 ),Variables(X(:lot_id)";
For Each( {colname, idx}, ycollist,
theExpr = theExpr || ",Y(:\!"" || colname || "\!"n)"
);
theExpr = theExpr || ")";
For Each( {colname, idx}, ycollist,
theExpr = theExpr || ",Elements( Position( 1," || Char( idx ) ||
" ), Box Plot( X, Y) ) "
);
theExpr = theExpr || ");";
Eval( Parse( theExpr ) );
Return( vlb );
);
my_groups = {{"PNP1", "PNP2", "PNP3"}, {"NPN3", "NPN2", "NPN1", "NPN4"}};
dt = Open( "$SAMPLE_DATA\semiconductor capability.jmp" );
// could also just create journal and add new_vlb to that
nw = New Window( "Collector", vlb = V List Box() );
For Each( {my_group}, my_groups,
If( Length( my_group ) != 0,
new_vlb = create_graph( dt, my_group );
vlb << Append( new_vlb );
vlb = V List Box();
)
);