JMP 专家您好,
不知怎么的,我觉得我的帖子被删除了,重新发一下
我有一个DOE表,里面有很多预测公式,这些公式有X,Y轴关系
我想将数据表重新排列为以下格式,以便我可以绘制曲面图(X,Y,值)以查看当我更改参数时它如何变化

两个问题:
1.我可以得到公式,然后连接到以下格式 if ( row == 1, Formula 1, if( row == 2, Formula 2, ......etc)
但最终公式是一个带有“”的长字符,我需要手动删除“'以使公式起作用
2.我使用H列表框获取值并设置每一行更改参数,以便我可以看到曲面图如何变化。但理想情况下我想使用 scoll bar 来更改参数,以便我可以更流畅地看到更改
dt = data table("example DOE table");
dt2 = current data table();
colname = dt << get column names();
colnamelist = {};
formulalist = {};
loopword = char("If( Row() == ");
mid = char("");
final = char("");
//Get column names with predicted formula
for (i = 1, i <= N items(colname),i++,
pos = Contains (colname[i], "Pred F");
if(pos == 1 , insert into(colnamelist, colname[i]), continue())
);
//Get formula from columns and save into list
for each({colval}, colnamelist,
eval(evalexpr(
formula = Char(Expr(Name Expr(As Column(dt,colval))) << get formula());
));
insert into (formulalist, formula)
);
//Concat formulas to below format: If( row == 1, Formula 1, If( row ==2, Forumla 2, If( row == 3, formula 3)))......etc
for (i=1, i <= N rows() , i++,
mid = mid || loopword || char(i) || ", " || char(formulalist[i]) || ", "
);
final = mid || char("0");
for (i=1, i <= N rows() , i++,
final = final || char(")")
);
eval(evalexpr(
:height << set formula(expr(final))
));
nw = New Window( "process paramaeter setting",
H List Box( Text Box( " Input Parameter A " ), A = Number Edit Box() ),
H List Box( Text Box( " Input Parameter B " ), B = Number Edit Box() ),
H List Box( Text Box( " Input Parameter C " ), C = Number Edit Box() ),
H List Box( Text Box( " Input Parameter D " ), D = Number Edit Box() ),
Button Box( "OK",
theA = A << get;
theB = B << get;
theC = C << get;
theD = D << get;
:Parameter A << set each value(theA);
:Parameter B << set each value(theB);
:Parameter C << set each value(theC);
:Parameter D << set each value(theD);
//Somehow the column with formula cannot draw into surface plot directly, so I have to copy and paste value to anohter column to draw
newheight = :height << get values;
:newheight<< set values(newheight);
)
)
我发现了,一个简单的 parse() 就可以解决我的第一个问题
seval(evalexpr(
:height << set formula(expr(parse(final)))
));
但对于第二个问题,如果我们能够有滚动条来设置每个值,以便用户可以轻松查看 3D 地图如何随着参数的变化而变化,那就太好了,
谢谢吉姆,我正在寻找一个滑块盒。
但还有一件事,我创建一个按钮框来从滑块框中获取值,然后设置每个值来更改行,是否可以使行随着滑块实时更改,而不需要额外的检查按钮?
Value = 0;
New Window( "Example",
Panel Box( "Parameter setting",
tb = Text Box( "Parameter A: " || Char( Value ) ),
sb = Slider Box( 0, 1, Value, tb << Set Text( "Value: " || Char( Value ) ) ),
Button Box( "OK",
:Parameter A << set each value(Value)
)
)
);
查看 Slider Box() 的脚本索引,你会看到:
语法: box = Slider Box(最小值,最大值,变量, SCRIPT , ,
您可以从 OK 按钮中取出 JSL,并将其放入 Slider Box() 的定义中。每次移动滑块时都会执行它。