複数のY軸グラフ
これは、すべてのy軸変数をスケーリングしてオーバーレイし、変数の単位と範囲でy軸のスケールを提供する特殊なグラフです。これは、すべて異なる範囲にある3つまたは4つの変数をオーバーレイする場合に便利です。上の図では、流量は0〜40の範囲にあり、電力は200〜1000および100〜500の範囲にあります。このタイプのグラフは、多くの場合、複数のセンサーが同時にデータを記録する科学および工学アプリケーションで使用されますが、各センサーの範囲はかなり異なります。たとえば、発酵の例では、グルコースは1〜5 g / dl、pHは6.8〜7.8、乳酸は10〜50 mmol、細胞数または濁度は1桁大きくなります。すべての変数間の関係を経時的にグラフ化する簡単な方法は、プロセスの速度論を理解する(または異常なパターンを検出する)のに非常に役立ちます。
デフォルトの名前はHere(1); dt =現在のデータテーブル(); //これもダイアログである可能性がありますが、この方法でアドインを作成するように設定されています。////////////////////////////////////////////////// ///////////// Expressions-スクリプトobj = Expr(//グラフビルダープロットgb gb = dt2 << Graph Builder(Size (640、230)、Show Title(0)、//// opt Show Control Panel(0)、Legend Position( "Inside Left")、Variables(X(Column(dt2、1))、Y(:Data) 、Overlay(:Column Names))、//:Rowはダイアログ内の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 Outline Box( "Y-axis Labels")); objhlb1 = Expr(Hリストボックス( "1")); //これには軸プロットがありますobjhlb2 = Expr(H List Box( "1")); //これはobjグラフを持ちますobjvlb = Expr(V List Box( "1")); //これにはoutとdt2stackcols = Expr(columns());があります//スタックする列名dt2stack = Expr(//引数付きのスタック式。注:列引数は最初でなければなりません。stack(Source Label Column( "Column Names")、Stacked Data Column( "Data"))); ////////////////////////////////////////////////// //////////////////列名を取得するダイアログcd = Column Dialog(ylist = ColList( "Y"、Min Col(2)、Max Col(8)、Data Type ( "数値")、モデリングタイプ({"連続"}))、xlist = ColList( "X"、最大Col(1)、モデリングタイプ({"連続"、"多重応答"}))); 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(" multiple y-axis table "); //これは標準化された値が行くテーブルです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、// ye、これは、「for」ループ内の「if」引数ですi = 2; // x "が指定されている場合、リストの2番目から開始ycol = As Column(dt、ylist [1])<<値を取得; dt1 << New Column(Munger(ylist [1]、1、": "、"")、set values(ycol)); // this is soooo ugly、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、":"、"")、set values(yycol)); //これはすっごくいです、非常に残念ですamin = Min(ycol); //このスクリプトのこの2番目の部分は、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 ++ 、Insert Into(dt2stackcols、ylist [i]);); Insert Into(dt2stack、Name Expr(dt2stackcols)、1); dt2 = dt1 << Eval Expr(dt2stack); eval(substitute(expr(dt2 = dt1 << ping)、expr(ping)、evalexpr(dt2stack))); //これは難しい!dt2 << set name( "multiple y-axis stack"); ////////////////////////////////////////////////// ///////////////表示される最終ウィンドウにすべての部品を組み立てます-順序は非常に重要ですInsert Into(objout、Name Expr(objhlb1)); Insert Into(objvlb、Name Expr(objout)); Insert Into(objhlb2、Name Expr(objvlb)); Insert Into(objhlb2、Name Expr(obj)); Insert Into(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