JSL を使用して、チャートのプロットや参照線の追加などを自動化できますか?こんにちは、
私は定期的に分布図をプロットします。数列のデータしか取得できない日もあれば、かなり多くのデータを取得する日もあります。
個々のチャートが生成されたら、読みやすくするためにそれぞれの最小/最大 Y 軸を調整し、いくつかの基準線 (基本的に USL 線と LSL 線) を追加する必要があります。しばらくすると、特にデータ列が多くなり、退屈になります。
プロセス自体は比較的単純で繰り返しであるため、このプロセスを自動化する方法があるかどうかを確認したいと考えています。 JSL スクリプトがここでの解決策になる可能性があると考えています (私はスクリプトの初心者です)。
これがスクリプトで実行したいことです:
1. データの各列は 5 つのデータ ポイントで構成され、1 行目と 2 行目にそれぞれ USL と LSL が含まれます。
2. スクリプトはデータのすべての列を読み取る必要があります。
3. すべてのデータの個別の分布図をプロットする
4. USL と LSL の基準線を追加します (ここで線の太さと色を設定できますか?)
5. 次に、Y 軸の最小値を LSL-0.003 に変更し、Y 軸の最大値を USL から USL+0.003 に変更します。
JSL は上記のことを行うことができますか?
ありがとう!
自動化とスクリプト作成Re: JSL を使用してチャートのプロットや参照線の追加などを自動化できますか短い答え: JSL ならそれが可能です。
Re: JSL を使用してチャートのプロットや参照線の追加などを自動化できますか- コミュニティへようこそ
- はい、JMP スクリプトを使用すると、説明したタスクを簡単に実行できます。
- JMP は、各チャートに USL および LSL 値を自動的に表示します。ただし、説明したデータ構造は JMP の通常の構造ではありません。スクリプトに JSL を追加して USL および LSL データを取得し、それを各列の仕様制限列プロパティに移動し、データの最初の 2 行を削除するのは非常に簡単です。
- データの説明では、データの各列にデータ ポイントが 3 つしかないことが示されているようです。(5 データ ポイントから LSL 行と USL 行を差し引いたもの) そして、そこから分布図を作成します。JMP の用語を使用すると、分布チャートはヒストグラム表示です。これは必要なチャートとして指定しているものですか?その場合、3 つのデータ ポイントからこのグラフを作成するにはどうすればよいでしょうか。
- 軸の最小値と最大値の変更は非常に簡単で、スクリプトに追加できます。
- 最初のエントリで説明したことの私の解釈は完全に間違っている可能性があります。使用しているデータのサンプルと、表示する必要があるグラフの図を提供していただければ幸いです。
- JMP の [ヘルプ] プルダウン メニューにある「Discovering JMP」ドキュメントに時間をかけて目を通すことをお勧めします。
Re: JSL を使用してチャートのプロットや参照線の追加などを自動化できますかお返事をありがとうございます。
4 番目については、うまく説明できずに申し訳ありませんでした。 明確にするために、各列には 7 行のデータがあります。 1 行目は LSL、2 行目は USL です。 行 3 ~ 7 は実際のデータです。
パート 6 のサンプル データと結果のグラフは次のとおりです。


この例のグラフでは、データの 1 行目と 2 行目もプロットされていますが、これは望ましくありません。 それぞれ LSL と USL です。 私が通常行うのは、データに LSL と USL を含めないことです。
Re: JSL を使用してチャートのプロットや参照線の追加などを自動化できますかこれは、必要なものを生成するスクリプトの例です

Names Default To Here( 1 );
// Create the data table
// dt = open( "<PATH to="" the="" file="" that="" has="" the="" data="https://community.jmp.com/">" );
// Here is the sample data table you provided
dt = New Table( "Example",
Add Rows( 7 ),
New Column( "Data1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [9.5, 10.5, 10, 10.2, 9.7, 9.6, 10.4] )
),
New Column( "Data2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [4.5, 5.5, 5, 5.1, 5.2, 4.9, 4.7] )
)
);
// Ge all of the numeric column's names
colNameList = dt << get column names( string, continuous );
//Take the data from rows 1 & 2 and create the Spec Limints column property
For Each( {col}, colNameList,
Eval(
Substitute(
Expr(
Column( dt, col ) << set property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Show Limits( 1 )}
)
),
Expr( _LSL_ ), As Column( dt, col )[1],
Expr( _USL_ ), As Column( dt, col )[2]
)
)
);
// Exclude and Hide row 1 & 2 to eliminate them from Distributions
dt << Select rows( {1,2} );
dt << hide and exclude;
// Run the Distribution Platform, having the Spec Limits as
// Column Properties, will insure the proper Min and Max for
// the Y axis
dt << Distribution( column( eval(colNameList) ));</PATH>Re: JSL を使用してチャートのプロットや参照線の追加などを自動化できますかああすごい.. まさかあなたが脚本を書いてくださるとは思っていませんでした - ありがとうございます!
スクリプトの前半部分は、前に提供したデータのサンプル テーブルの作成に関するものであることがわかりました。 選択した既存のデータ テーブル (.jmp ファイルだと思います) をスクリプトに指定して実行できるように変更するにはどうすればよいですか?
Re: JSL を使用してチャートのプロットや参照線の追加などを自動化できますかテーブルを開く:スクリプトガイド > データテーブル > データテーブルを使ってみる(使用開ける() )
ユーザー選択からパスを取得するファイルを選択()
Re: JSL を使用してチャートのプロットや参照線の追加などを自動化できますか私の考えは、あなたが私の他のスレッドから回答するのに協力してくれた別のコードセットを組み込む必要があるということです。
If( Is Missing( fn ),
throw(),
// Else Open the selected file
Open( fn )
);
ファイルを開いた後、それをデータテーブルとしてロードする必要があると思いますか? これは dt 構文を使用することを意味しますか?
Re: JSL を使用してチャートのプロットや参照線の追加などを自動化できますかOpen() を使用してデータテーブルを開き、open は開いたデータテーブルへの参照を返します (ファイルを開くことに成功した場合)。これは dt 変数に保存されます。
dt = Open("myfile.jmp");Re: JSL を使用してチャートのプロットや参照線の追加などを自動化できますか以前に貢献者の 1 人から共有されたスクリプトを変更して、ユーザーがどのデータ ファイル (.jmp) を開くかを選択できるようにしました。
Names Default To Here( 1 );
// Open a dialog to choose a .jmp file to open
// Get the filename of the .jmp file to open
dt = Pick File("Select a .jmp file to open", "", {"JMP Files|jmp;jsl;jrn", "All Files|*"}, 1, 0, "");
// If the user did not select a file, exit the script
If( Is Missing( dt ),
Throw(),
// Else Open the selected file
Open( dt )
);
// Get all of the numeric column's names
colNameList = dt << get column names( string, continuous );
// Take the data from rows 1 & 2 and create the Spec Limits column property
For Each( {col}, colNameList,
Eval(
Substitute(
Expr(
Column( dt, col ) << set property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Show Limits( 1 )}
)
),
Expr( _LSL_ ), As Column( dt, col )[1],
Expr( _USL_ ), As Column( dt, col )[2]
)
)
);
// Exclude and Hide row 1 & 2 to eliminate them from Distributions
dt << Select rows( {1,2} );
dt << hide and exclude;
// Run the Distribution Platform
dt << Distribution( column( eval(colNameList) ));スクリプトを実行すると、次のエラーが発生しました。
Send は、 'Send' のアクセスまたは評価でスクリプト可能オブジェクトを期待します、 dt << /*###*/列名を取得(文字列、連続) /*###*/
dt << get columns names? に問題があるようです。
Re: JSL を使用してチャートのプロットや参照線の追加などを自動化できますかファイルパスとして dt があるため、これは文字列です。以下のように、新しく開いたファイルを参照させる必要があります。 Open() ステートメントに注目してください
Names Default To Here( 1 );
// Open a dialog to choose a .jmp file to open
// Get the filename of the .jmp file to open
dt = Pick File("Select a .jmp file to open", "", {"JMP Files|jmp;jsl;jrn", "All Files|*"}, 1, 0, "");
// If the user did not select a file, exit the script
If( Is Missing( dt ),
Throw(),
// Else Open the selected file
dt = Open( dt )
);
// Get all of the numeric column's names
colNameList = dt << get column names( string, continuous );
// Take the data from rows 1 & 2 and create the Spec Limits column property
For Each( {col}, colNameList,
Eval(
Substitute(
Expr(
Column( dt, col ) << set property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Show Limits( 1 )}
)
),
Expr( _LSL_ ), As Column( dt, col )[1],
Expr( _USL_ ), As Column( dt, col )[2]
)
)
);
// Exclude and Hide row 1 & 2 to eliminate them from Distributions
dt << Select rows( {1,2} );
dt << hide and exclude;
// Run the Distribution Platform
dt << Distribution( column( eval(colNameList) ));Re: JSL を使用してチャートのプロットや参照線の追加などを自動化できますかより関連性の高いタイトルの新しいスレッドに移動しました。
Re: JSL を使用してチャートのプロットや参照線の追加などを自動化できますかこのコードはもう少しすっきりしています:
// Get the filename of the .jmp file to open
filename = Pick File("Select a .jmp file to open", "", {"JMP Files|jmp;jsl;jrn", "All Files|*"}, 1, 0, "");
// If the user did not select a file, exit the script
If( Is Missing( filename ),
Throw(),
// Else Open the selected file
dt = Open( filename )
);