多个y轴图多个Y轴图
这是一个专门的图,可缩放所有y轴变量并覆盖它们,然后以变量的单位和范围提供y轴比例。当您要覆盖3或4个都在不同范围内的变量时,这很有用。在上图中,流速在0-40范围内,而功率在200-1000和100至500范围内。这种类型的图形通常用在科学和工程应用中,其中多个传感器同时记录数据,但是每个传感器的范围差别很大。例如,在发酵实例中,葡萄糖为1-5g / dl,pH为6.8-7.8,乳酸为10-50mmol,并且细胞计数或浊度为一个数量级以上。绘制随时间变化的所有变量之间的关系的简单方法非常有助于理解过程的动力学(或检测异常模式)。
名称默认为Here(1); dt =当前数据表(); //这也可能是一个对话框,但是它是通过这种方式进行添加的。///////////////////////////////////////////////////// //////////////-表达式-我将其全部移至此处,而不是通过脚本将它们分散在其中obj = Expr(//图形生成器绘图为gb gb = dt2 <<图形生成器(大小(640,230),显示标题(0),//// opt显示控制面板(0),图例位置(“ Inside Left”),变量(X(Column(dt2,1)),Y(:Data) ,Overlay(:Column Names)),//:行需要基于对话框中的x或不基于x的动态显示。Elements(Line(X,Y,Legend(7))),SendToReport(Dispatch({},“ 400”,LegendBox,{Set Title(“”)}))),SendToReport(Dispatch({},“ Graph Builder” ,OutlineBox,{Set Title(“ Scaled Response Graph”)}))),SendToReport(Dispatch({},“ Data”,ScaleBox,{Label Row(Show Major Labels(0))}))),SendToReport(Dispatch({ },“ Y title”,TextEditBox,{Set Text(“”}}))))); objwin = Expr(//一切都将在新窗口中结束的窗口(“带有多个Y的缩放响应图”)); objout = Expr(//轮廓框Outline Box(“ Y轴标签”)); objhlb1 = Expr(H List Box(“ 1”)); //这个具有轴图objhlb2 = Expr(H List Box(“ 1”)); //此对象具有obj图形objvlb = Expr(V List Box(“ 1”)); //这个已经出了,并且dt2stackcols = Expr(columns()); //要堆栈的列名称dt2stack = Expr(//带参数的堆栈表达式。注意:列参数必须是第一个。stack(Source Label Column(“ Column Names”),堆积数据Column(“ Data”)))); ///////////////////////////////////////////////////// ////////////////通过对话框获取列名cd =列对话框(ylist = ColList(“ Y”,Min Col(2),Max Col(8),数据类型(“ Numeric”),Modeling Type({“ Continuous”}})),xlist = ColList(“ X”,Max Col(1),Modeling Type({“ Continuous”,“ Multiple Response”}))))); Eval(Eval Expr(cd [1])); // eval expr,返回cd [1]中的内容,并且eval使其执行Eval(Eval Expr(cd [2])); //仅单独运行cd [1],然后运行evalexpr)cd [1],这就是我获取ylist和xlist变量的方式///////////////////// //////////////////////////////////标准化数据表,and“ Axis Boxes”“ dt1 = New Table(”多个y轴表“); //这是标准化值所在的表If(N Items(xlist)== 1,//请注意,如果存在为xlist选择的列,则不会按比例缩放Insert Into(ylist,xlist,1),//叫我疯了,但是ylist中的第一个值是“ X”,如果它存在dt1 << New Column(“ Row“,Formula(Row())))); For(If(N Items(xlist)== 1,//是,这是“ for”循环中的“ if”参数i = 2; //如果是“指定了x“,然后从列表中的第二件事开始ycol = As Column(dt,ylist [1])<<获取值; dt1 << New Column(Munger(ylist [1],1,”:“,“”),设置值(ycol)); //这太丑陋了,i = 1),i <= N Items(ylist),i ++,// For循环的设置结束ycol = As Column(dt,ylist [i])<<获取值; yycol =((yco l-Min(ycol))/(Max(ycol)-Min(ycol))); dt1 << New Column(Munger(ylist [i],1,“:”,“”),设置值(yycol)); //这太丑了,非常抱歉amin = Min(ycol); //此脚本的第二部分正在获取值以使y轴框amax = Max(ycol); //我需要每个未缩放列的最小值和最大值,以及它们的名称ymin = amin-((amax-amin)* .1); // y轴框的轴范围比最小和最大值高10%。ymax = amax +((amax-amin)* .1); //它看起来更好,并且与gb中的缩放数据更紧密对齐obj1 = Graph Box(Framesize(0,230),yName(Char(ylist [i])),Y Scale(ymin,ymax)); //它不是一个真正的轴框,而是一个压缩的图形框。轴盒是免费的Insert Into(objhlb1,Name Expr(obj1)); //这里有很多名称expr()的插入。由内而外地构建表达的一部分。); ///////////////////////////////////////////////////// //////////////堆叠用于绘制For(If(N Items(xlist)== 1,i = 2,i = 1),i <= N Items(ylist),i ++的标准化数据,插入到(dt2stackcols,ylist [i]);)中;插入到(dt2stack,名称Expr(dt2stackcols),1); dt2 = dt1 << Eval Expr(dt2stack); eval(替换(expr(dt2 = dt1 << ping),expr(ping),evalexpr(dt2stack))); //这很棘手!dt2 <<设置名称(“多个y轴堆栈”); ///////////////////////////////////////////////////// ///////////////将所有零件组装到显示的最后一个窗口中-顺序很重要插入Into(objout,Name Expr(objhlb1));插入到(objvlb,名称Expr(objout));插入到(objhlb2,Name Expr(objvlb));插入到(objhlb2,Name Expr(obj));插入到(objwin,Name Expr(objhlb2)); Eval(Eval Expr(objwin)); //对所有表达式求值后求所有组装的零件gb << size(600,285); //如果要设置图表格式,请向gb发送消息
在此处找到有关脚本如何工作的更详细的说明:
https://community.jmp.com/t5/Byron-Wingerd-s-Blog/Multiple-Y-Axis-Graphs/ba-p/52000
生命科学