多個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變量的方式///////////////////// //////////////////////////////////標準化數據表,和“軸箱”” dt1 =新建表(“多個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
生命科學