将选定的列名称放入公式中回复:将选定的列名称放入公式中你好摩根0 ,
这是一个很棒的脚本。 必须如何更改脚本才能添加其他公式按钮,例如 Col Mean 或 Col Std Dev?
回复:将选定的列名称放入公式中格兹摩根,
你是一个巫师。 我尝试了你所说明的两种方法并取得了成功。 更重要的是,我学到了更多的脚本技术。 非常感谢。回复:将选定的列名称放入公式中首先有几点注意事项:
- oc 是列引用,JMP 无法解释语法 oc( Connect Points(1) )。
- 覆盖图脚本索引中显示的语法似乎需要列名称,请参见下面的示例。 它还接受 :Name("Volume")(Connect Color (0) );
obj = Overlay Plot(
X( :Date ),
Y( :High, :Low, :Close, :Volume ),
Y Scale( Left, Left, Left, Right )
);
obj << Connect Points( 1 );
obj << :Volume( Connect Color( 0 ) );
obj << :Low( Connect Color( "Red" ) );
- 叠加图有一些不错的功能,但是,JMP 开发人员可能会建议使用图形生成器。 对于你的数据表的结构来说,Overlay可能更容易使用,所以我会使用Overlay。
- 下面的脚本以足球数据表的子集开始,您没有添加任何列。 然后计算移动平均线。 该脚本创建一个覆盖图,并使用 Eval(Parse(EvalInsert())) 构建脚本索引中显示的语法,并使用带引号的名称和关闭点的选项。
- 脚本的第二部分演示了一种替代方法。 打开所有覆盖列的线和点。然后使用 Xpath() 创建线段和标记段的引用列表。要关闭线条,请将线条宽度设置为 0。 要关闭点,请将透明度设置为 0。我发现使用这些段使用更简单的语法。然而,Xpath() 虽然非常有用,但可能被认为更高级。希望有帮助。
Names default to here(1);
dt = current data table();
colnme = "Speed";
oc = Column(dt, colnme);
nc = dt << New Column( colnme || " Moving Average",
Numeric,
Formula(Col Moving Average(oc[],1,4,16) )
);
ovp = Overlay Plot( Y(oc, nc));
ovp << Connect Thru Missing(1);
ncnme = nc << get name;
//The syntax is ovp << :col( opt1);
Eval( Parse(EvalInsert("ovp << :name(\!"^ncnme^\!")(Show Points(0))" ) ) ) ;
//alternate method
ovl = Overlay Plot( Y(oc, nc));
ovl << Connect Thru Missing(1);
lines = ovl << Xpath("//LineSeg");
points = ovl << Xpath("//MarkerSeg");
wait(2);
lines[1] << Line width(0); //turn off line 1
wait(2);
lines[1] << Line width(2); //turn on line 1
wait(2);
lines[1] << Line width(0); //turn off line 1
wait(2);
points[2] << Transparency(0); //turn off points 2
回复:将选定的列名称放入公式中继续我的努力。 我已经取得了很大的进步。我将选定的列名称放入公式中,现在可以使用对话框中的 MA 参数制作选定列及其移动平均线的叠加图。 好的。 很不错。 我正在使用“叠加图”功能。 我可以修改两个图表上的所有点,但无法弄清楚如何仅修改绘图的属性之一。
这是一个代码片段来说明。 这有效:
cn1 = colName || "";
cn2 = colName || " Moving Average";
dt << New Column( colName || " Moving Average",
Numeric,
Formula( Eval( Parse( formulaString ) ) )
);
oc = Column( cn1 );
nc = Column( cn2 );
nw2 << Close Window;
funny = Overlay Plot( Y( oc, nc ), );
funny << (Connect Points( 1 ));
生成的图连接了 MA 和原始点。
但是,如果我更改最后一行以仅修改其中一个图,例如这个,它将不起作用:
funny << oc( Connect Points( 1 ) );
没有点相连。
因此,“oc”在“叠加图”函数中被识别为 Y 列之一,但在上述语句中未被识别。
有人可以帮忙吗? 我的心理健康受到威胁。:) 我附上了嵌入了整个脚本的数据表。还有一个额外的自动生成的小脚本,可以按照我希望整个脚本的方式绘制情节;我只能通过手动更改图例来制作此图。
凯文
回复:将选定的列名称放入公式中好的。 我会照办的。
非常感谢,
凯文
回复:将选定的列名称放入公式中没问题。 但我会用gz的方法。 它更强大,因为它可以处理名称中包含特殊字符的列。
回复:将选定的列名称放入公式中谢谢你,GZ,
是的,你的解决方案也对我有用。 如果没有选择任何列,则捕获是一个很好的技巧。 我将继续使用它。
回复:将选定的列名称放入公式中谢谢你,迈克,
是的,它确实对我有用。 而且,我学到了更多的脚本技术。
回复:将选定的列名称放入公式中仅当列名称中没有特殊符号时,您的脚本才会起作用。 如果存在,则命名引用必须是 :Name("string")。 此外,脚本中还添加了对已选择列的检查。
Names Default to Here(1);
dt = Current Data Table();
colname = .;
New Window( "Select Column",
x = Col List Box(
Data Table( dt << get name ),
all, <<SET data="https://community.jmp.com/" type=""></SET>
回复:将选定的列名称放入公式中
尝试这个。 col list box() 部分的最后两行似乎是一个脚本,这意味着它们应该用分号(或胶水)分隔。其余行是 col 列表框的参数,以逗号分隔。 col 列表框的“colName = ...”部分在这里被注释掉了,因为我认为它没有做太多事情。 最好在脚本的按钮框部分抓住它。 如果需要,您可以添加回表变量。
最好让列表框仅加载数字列。 我不记得如何正确地做到这一点。 目前,它将全部加载到列表框中。 我将 min / max col() 更改为 max selected。 即一次不超过 1 个。
至于公式部分,我通常需要一些尝试和错误才能将字符串放在我想要的位置。 这似乎有效。
dt = Current Data Table();
colname = .;
New Window( "Select Column",
x = Col List Box(
Data Table( dt << get name ),
all,//numeric,
//min col( 1 ),
max selected( 1 )//,
//colname = Eval Expr (Expr(x << get selected)[1])//,
//dt << New Table Variable( "Selected Column", (x << get selected)[1] )
),
Button Box( "Moving Average",
colName = Char( (x << get selected)[1] );
//myCol = column(colName);
formulaString = "Col Moving Average( :"|| char(colName) ||", 0, 4, 0 )";
dt << New Column( colName || " Movin Average",
Numeric,
//Formula( Col Moving Average( Name Expr(colname), 0, 4, 0 ) )
Formula( eval(parse(formulaString)) )
)
)
);
回复:将选定的列名称放入公式中我试图弄清楚如何将对话框中的列选择正确地转换为公式。 我查看了脚本书中的大量讨论和示例,尝试了很多东西。 还没有骰子。 正如您在脚本中看到的,我想选择一列并根据列移动平均公式创建一个新列。 我将不胜感激的帮助。
这是我最近的尝试:
dt = Current Data Table();
colname = .;
New Window( "Select Column",
x = Col List Box(
Data Table( dt << get name ),
all,
min col( 1 ),
max col( 1 ),
colname = Eval Expr (Expr(x << get selected)[1]),
dt << New Table Variable( "Selected Column", (x << get selected)[1] )
),
Button Box( "Moving Average",
dt << New Column( Char( (x << get selected)[1] ) || " Movin Average",
Numeric,
Formula( Col Moving Average( Name Expr(colname), 0, 4, 0 ) )
)
)
);