ロックされた列によりスクリプトが混乱する私は外れ値ボックス プロットを教え、ひげの計算方法をクラスに視覚的に示すことができるように、ひげ全体の長さを追加するスクリプトを作成しました。 列がロックされていない限り、スクリプトは正常に機能します。 列をロックするとスクリプトに影響が出るのはなぜですか? スクリプトの実行後、スクリプトをスクリプト ウィンドウに保存しました。これは正しいのですが、一部のグループではひげが描画されません。 これが私のスクリプトです。現在も作業中です。MacBook で JMP Pro 17.0.0 を使用しています。
Names Default To Here( 0 );
Clear Log();
dt = Current Data Table();
If( Not( Is Scriptable( dt ) ),
// Check that there is a data set open;
// ca=Caption("Please Open Design Data Set", Back Color(yellow));
// Stop();
dtsel = Pick File( "Open File", {"JMP|jmp", "All files|*"} );
If( dtsel == "",
Stop(),
Try( dt = Open( dtsel ), Stop() )
);
);
output = Expr(
dt2 = Data Table( dt ) << Summary(
Group( bycol ),
Median( nm ),
Interquartile Range( nm ),
Quantiles( 25, nm ),
Quantiles( 75, nm ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 )
);
columnnamemedian = Column( dt2, 3 ) << Get Name;
columnnamesample = Column( dt2, 2 ) << Get Name;
columnnamegroup = Column( dt2, 1 ) << Get Name;
columnameIQR = Column( dt2, 4 ) << Get Name;
columnname25 = Column( dt2, 5 ) << Get Name;
columnname75 = Column( dt2, 6 ) << Get Name;
Medians = Column( dt2, columnnamemedian ) << Get As Matrix;
Samplesize = Column( dt2, columnnamesample ) << Get As Matrix;
Groups = Column( dt2, columnnamegroup ) << Get As Matrix;
IQR = Column( dt2, columnameIQR ) << Get As Matrix;
Q25 = Column( dt2, columnname25 ) << Get As Matrix;
Q75 = Column( dt2, columnname75 ) << Get As Matrix;
meanno = N Rows( dt2 );
LWhis = {};
UWhis = {};
i = 1;
For( i = 1, i <= meanno, i++,
LWhis[i] = Q25[i] - 1.5 * IQR[i];
UWhis[i] = Q75[i] + 1.5 * IQR[i];
Show( Q25[i] );
Show( Q75[i] );
Show( LWhis[i] );
Show( UWhis[i] );
Show( IQR[i] );
Show( i );
If( LWhis[i] > Q25[i],
LWhis[i] = Q25[i],
LWhis[i] = LWhis[i]
);
If( UWhis[i] < Q75[i],
UWhis[i] = Q75[i],
UWhis[i] = UWhis[i]
);
);
MinLW = LWhis[1];
MaxUW = UWhis[1];
i = 1;
For( i = 1, i <= meanno, i++,
If( LWhis[i] < MinLW,
MinLW = LWhis[i],
MinLW = MinLW
);
If( UWhis[i] > MaxUW,
MaxUW = UWhis[i],
MaxUW = MaxUW
);
);
If( MinLW < 0,
MinLW = MinLW * 1.1,
MinLW = MinLW * 0.9
);
If( MaxUW < 0,
MaxUW = MaxUW * 0.9,
MaxUW = MaxUW * 1.1
);
Current Data Table( dt );
//Close(dt2, NoSave);
gb = Graph Builder(
Variables( X( (Column( bycol )) ), Y( Column( nm ) ) ),
Elements( Points( X, Y ), Box Plot( X, Y ) ),
SendToReport(
Dispatch( {} ),
),
);
gbr = gb << report;
Report( gb )[AxisBox( 2 )] << Max( MaxUW ) << Min( MinLW );
i = 1;
For( i = 1, i <= meanno, i++,
Show( LWhis[i] );
Show( UWhis[i] );
Eval(
Eval Expr(
gbr[Framebox( 1 )] << Add graphics Script(
Pen Color( Red );
Line Style( "Dotted" );
V Line( Expr( i ), Expr( LWhis[i] ), Expr( Q25[i] ) );
V Line( Expr( i ), Expr( Q75[i] ), Expr( UWhis[i] ) );
);
)
)
;
);
//dt2 << Minimize Window;
Close( dt2, Nosave );
);
w = New Window( "Variables",
<<MODAL></MODAL>マックOSRe: ロックされた列がスクリプトを混乱させるいくつか例を挙げていただけますか? それが発生する画像またはデータセット。 ロックされた列がグラフィック スクリプトに影響を与える理由はわかりませんが、行の「インデックス」を 1 ではなく 0 から開始するように変更する必要があるかもしれません。
(1と2)

(0と1)

Re: ロックされた列がスクリプトを混乱させる
最初のものには線が描かれていませんでしたが、今回のスクリプトを見ると、線が描かれているはずです。 番号 7 はギャップであり、3 は間違っています。これがこの正確なプロットのスクリプトです。赤い線が描画内容と一致していないことに注意してください。 このために使用した JMP ファイルを添付しました。
Graph Builder(
Variables( X( :Process Configuration ), Y( :Y ) ),
Elements( Points( X, Y, Legend( 1 ) ), Box Plot( X, Y, Legend( 2 ) ) ),
SendToReport(
Dispatch(
{},
"Y",
ScaleBox,
{Min( 6.36165 ), Max( 36.07175 ), Inc( 5 ), Minor Ticks( 1 )}
),
Dispatch(
{},
"Graph Builder",
FrameBox,
{Add Graphics Script(
13,
Description( "" ),
Pen Color( Red );
Line Style( "Dotted" );
V Line( 1, 13.039, 18.502 );
V Line( 1, 22.144, 27.607 );
), Add Graphics Script(
14,
Description( "" ),
Pen Color( Red );
Line Style( "Dotted" );
V Line( 2, 7.0685, 16.061 );
V Line( 2, 22.056, 31.0485 );
), Add Graphics Script(
15,
Description( "" ),
Pen Color( Red );
Line Style( "Dotted" );
V Line( 3, 11.772, 17.973 );
V Line( 3, 22.107, 28.308 );
), Add Graphics Script(
16,
Description( "" ),
Pen Color( Red );
Line Style( "Dotted" );
V Line( 4, 14.0465, 18.737 );
V Line( 4, 21.864, 26.5545 );
), Add Graphics Script(
17,
Description( "" ),
Pen Color( Red );
Line Style( "Dotted" );
V Line( 5, 13.529, 18.002 );
V Line( 5, 20.984, 25.457 );
), Add Graphics Script(
18,
Description( "" ),
Pen Color( Red );
Line Style( "Dotted" );
V Line( 6, 8.0605, 17.335 );
V Line( 6, 23.518, 32.7925 );
), Add Graphics Script(
19,
Description( "" ),
Pen Color( Red );
Line Style( "Dotted" );
V Line( 7, 16.3455, 19.356 );
V Line( 7, 21.363, 24.3735 );
)}
)
)
);Re: ロックされた列がスクリプトを混乱させる送信したテーブルをロックされた列のない新しいテーブルにコピーすると、機能します。 行の「インデックス」を変更するにはどうすればよいですか? ロックされた列を持つ他のファイルがありますが、それらも機能しません。
Re: ロックされた列がスクリプトを混乱させる線は 1 つずつシフトされます (公称/順序データでは X 軸が 0 から始まると思います)


スクリプトのこの部分を変更できます
For(i = 1, i <= meanno, i++,
Show(LWhis[i]);
Show(UWhis[i]);
Eval(
Eval Expr(
gbr[Framebox(1)] << Add graphics Script(
Pen Color(Red);
Line Style("Dotted");
V Line(Expr(i), Expr(LWhis[i]), Expr(Q25[i]));
V Line(Expr(i), Expr(Q75[i]), Expr(UWhis[i]));
);
)
);
);
最も簡単なのは、V Line(Expr()) 内に i-1 を追加することです。
Re: ロックされた列がスクリプトを混乱させる動作するかどうかを確認するために公称列を数値/連続に変更してみましたが、動作しませんでした。 機能する唯一のことは、それを別のテーブルにコピーすることだったので、それがロックされた列であると推測した理由です。 なぜ機能しなかったのかはわかりませんが、モデリングタイプが名目的か連続かどうかを確認するための if ステートメントを追加し、あなたの提案を追加したところ、機能しました。 だから私はまだ混乱していますが、うまくいきました。 ありがとう! 数値/連続に変換しようとしたが機能しなかったので、私はそれを理解できなかったと思います。