データ更新時に管理図表示をフリーズする方法やあ、
CSVファイルを読み取って管理図を実行するスクリプトがあります。 私はこのプロセスを自動化して、新しいデータが更新され、管理図が新しいグラフを生成しないようにしたいと考えています。 私は、更新されたデータを含むチャートのみを表示することを好みます。
これが私が使用したスクリプトです。 私はあなたの助けに感謝します。 ありがとう
------------------
デフォルトの名前はここにあります( 1 );
dt =開ける(
「/Users/adatorab/Documents/JMP/PASS.csv」 、見えない);
obj = dt <<
管理図ビルダー(
変数( Y( :A ) )、
チャート(
位置( 1 )、
ポイント(
統計(
"個人"
)
)、
制限(
シグマ(
「可動範囲」
)
)
)、
チャート(
位置( 2 )、
ポイント(
統計(
「可動範囲」
)
)、
制限(
シグマ(
「可動範囲」
)
)
)
);
オブジェクト <<ショーウィンドウ( 0 );
nw =新しい窓( "管理図" );
nw <<追加(( H リストボックス( (オブジェクト <<報告) <<クローンボックス)));
Re: データ更新時に管理図表示をフリーズする方法ご協力ありがとうございました。
Re: データ更新時に管理図表示をフリーズする方法Bryon の管理図コードをあなたのコードにコピーし、ランダムな「分」時間を追加すると、次のようになります。
//Open a window to show a control chart and then update
//the chart every 15 seconds
//Includes a button to refresh early.
Names Default To Here( 1 );
//Define variables here that need to keep their values through subsequent function calls
//This includes the window and data table
//Open a window to hold the chart (note this only happens once)
nw = New Window( "Control Chart",
V List Box(
Button Box( "New Data", UpdateData() ),
holder = H List Box();
)
);
//Make a variable to hold a reference to the data table
dt = .;
//A function that will update the chart
UpdateData = Function( {},
//Close the table if it is already open
Try( dt << Close Window );
//Open data table
dt = Open( "$SAMPLE_DATA/Abrasion.jmp", Private );
//Make the control chart
obj = dt << Control Chart(
Group Size( 1 ),
KSigma( 3 ),
Chart Col( :Abrasion, Individual Measurement ),
SendToReport(
Dispatch(
{"Individual Measurement of Abrasion"},
"1",
ScaleBox,
{Min( nrows() - Floor( Random Uniform( 10, 25 ) ) ), Max( nrows() + 2 ), Inc( 5 ),
Minor Ticks( 1 )}
)
)
);
//Hide the temporary control chart window
obj << ShowWindow( 0 );
//Remove existing/old graph from the window (if there is one)
Try( (holder << Child) << Delete );
//Add the new graph
holder << Append( (H List Box( (obj << Report) << Clone Box )) );
//Close the temporary control chart
obj << Close Window;
);
//Script to update then chart and then call itself 15 seconds later
quickieScript = Expr(
//Load the chart in the window (run the script in the function)
UpdateData();
//Run this same script in 5 seconds
Schedule( 5, quickieScript );
);
//Start things off:
quickieScript;Re: データ更新時に管理図表示をフリーズする方法管理図ビルダーレポートがあるようです。 古典的な管理図は少し動作が異なります。 (より簡単に)
Re: データ更新時に管理図表示をフリーズする方法ありがとう。 これを試してみましたが、エラーは発生しませんでしたが、x 軸の 20 点しか表示されません。
さらにお手伝いいただけますか? とても感謝しています。
// ウィンドウを開いて管理図を表示し、更新します
// 15 秒ごとのチャート
//早期に更新するボタンが含まれています。
デフォルトの名前はここにあります( 1 );
//後続の関数呼び出しを通じて値を保持する必要がある変数をここで定義します
//これにはウィンドウとデータテーブルが含まれます
// ウィンドウを開いてチャートを保持します (これは 1 回だけ発生することに注意してください)
nw =新しい窓( "管理図" 、
V リストボックス(
ボタンボックス( 「新しいデータ」 、UpdateData() )、
ホルダー = H リストボックス();
)
);
//データテーブルへの参照を保持する変数を作成します
dt = 。 ;
//チャートを更新する関数
データの更新 =関数( {},
//テーブルが既に開いている場合は閉じます
試す( dt <<ウィンドウを閉じる);
// データテーブルを開く
dt =開ける( "$SAMPLE_DATA/摩耗.jmp" 、 プライベート );
//管理図を作成する
obj = dt <<管理図ビルダー(
2 つのシューハート チャートを表示( 0 )、
コントロールパネルを表示( 0 )、
機能を表示( 0 )、
変数( Y( :摩耗 ) )、
チャート(
ポイント( 統計( "個人" ))、
限界( シグマ( 移動範囲 ) )、
//警告( テスト 1( 1 ) )
SendToReport(
急送(
{ 「摩耗の個別測定」 }、
「1」 、
スケールボックス、
{分(狭い()- 20 )、マックス(狭い()+ 2 )、株式会社( 5 )、
マイナーティック( 1 )}
)
)
)
);
//一時管理図ウィンドウを非表示にする
オブジェクト <<ショーウィンドウ( 0 );
// 既存/古いグラフをウィンドウから削除します (存在する場合)
試す( (ホルダー <<子供) <<消去);
// チャートが更新されるまでしばらくお待ちください
待って( 0.2 );
// 新しいグラフを追加します
ホルダー <<追加( ( H リストボックス( (オブジェクト <<報告) <<クローンボックス)));
//一時管理図を閉じる
オブジェクト <<ウィンドウを閉じる;
);
// スクリプトを更新してチャートを更新し、15 秒後に自身を呼び出します
クイックスクリプト =エクスプレッション(
// チャートをウィンドウにロードします (関数内でスクリプトを実行します)。
UpdateData();
//同じスクリプトを 15 秒後に実行します
スケジュール( 15 、quickieScript );
);
// まず始めに:
クイックスクリプト;
Re: データ更新時に管理図表示をフリーズする方法これは、Abrasion.jmp に対して実行する管理図スクリプトです。
Control Chart(
Group Size( 1 ),
KSigma( 3 ),
Chart Col( :Abrasion, Individual Measurement ),
SendToReport(
Dispatch(
{"Individual Measurement of Abrasion"},
"1",
ScaleBox,
{Min( nrows()-25 ), Max( nrows()+2 ), Inc( 5 ),
Minor Ticks( 1 )}
)
)
);
古典的な管理図プラットフォームを使用します
Re: データ更新時に管理図表示をフリーズする方法ご提案いただきありがとうございます。 それが 2 番目の質問だったと思います。 元のスクリプト (上記) のどこにスクリプトを挿入しますか。
Re: データ更新時に管理図表示をフリーズする方法どうもありがとう。 これで私の問題は解決しました。
Re: データ更新時に管理図表示をフリーズする方法管理図で最新のデータのみを表示したいという問題ですか?
いくつかのテーブルでデータが更新されている状況に遭遇しました。 テーブルのコピーを取得するたびに、テーブル内の行数に関係なく、最後の 50 行だけが表示されます。
これは非常に簡単に設定できます。 管理図を作成し、X 軸を調整するだけです。 次に、管理図スクリプトを見て、以下のスクリプトのような部分を見つけます。
SendToReport(
Dispatch(
{"Individual Measurement of Metric 1"},
"1",
ScaleBox,
{Min( nrows()-50), Max( nrows()+2 ), Inc( 5 ),
Minor Ticks( 0 )}
),
Min( と Max( と書かれている部分は、元のスクリプトの値を編集してください。 min() 内の数値を次のように置き換えます。 nrows()-50 max() の数値を次のように置き換えます。 nrows()+2。
ここで、削除と追加という派手な操作をすべて行うと、最新のデータを含む管理図が得られます。
Re: データ更新時に管理図表示をフリーズする方法今なら分かると思います。問題は、スクリプトを実行するたびに新しいウィンドウが開くことです。各更新の開始時に、最後のウィンドウを閉じるか、同じウィンドウを新しいグラフで更新する必要があります。以下は後者の例です。
私は実際のコードを書く前に、コメントに「疑似コード」を書くことがよくあります。これは、コードが実際に期待どおりに動作することを確認するのに役立ちます。次に、ワークフロー全体が意味をなすようになったら、実際に実行するためのコードを入力します。
//Open a window
//Every 15 Seconds:
//Make a chart with the latest data
//Update the window with a new chart
//Open a window to show a control chart and then update
//the chart every 15 seconds
//Includes a button to refresh early.
Names Default To Here( 1 );
//Define variables here that need to keep their values through subsequent function calls
//This includes the window and data table
//Open a window to hold the chart (note this only happens once)
nw = New Window( "Control Chart",
V List Box(
Button Box( "New Data", UpdateData() ),
holder = H List Box();
)
);
//Make a variable to hold a reference to the data table
dt = .;
//A function that will update the chart
UpdateData = Function( {},
//Close the table if it is already open
Try( dt << Close Window );
//Open data table
dt = Open( "$SAMPLE_DATA/Abrasion.jmp", Private );
//Make the control chart
obj = dt << Control Chart Builder(
Variables( Y( :Abrasion ) ),
Chart(
Position( 1 ),
Points( Statistic( "Individual" ) ),
Limits( Sigma( "Moving Range" ) )
),
Chart(
Position( 2 ),
Points( Statistic( "Moving Range" ) ),
Limits( Sigma( "Moving Range" ) )
)
);
//Hide the temporary control chart window
obj << ShowWindow( 0 );
//Remove existing/old graph from the window (if there is one)
Try( (holder << Child) << Delete );
//Wait a moment to show when the chart updates
Wait(0.2);
//Add the new graph
holder << Append( (H List Box( (obj << Report) << Clone Box )) );
//Close the temporary control chart
obj << Close Window;
);
//Script to update then chart and then call itself 15 seconds later
quickieScript = Expr(
//Load the chart in the window (run the script in the function)
UpdateData();
//Run this same script in 15 seconds
Schedule( 15, quickieScript );
);
//Start things off:
quickieScript;Re: データ更新時に管理図表示をフリーズする方法申し訳ありませんが、最初の数行を見逃しました。 こちらが正しいものです。
------------
デフォルトの名前はここにあります( 1 );
クイックスクリプト =エクスプレッション(
スケジュール( 15 、quickieScript );
//サンプルデータを開く
dt =開ける( "$SAMPLE_DATA/摩耗.jmp" );
//チャートを更新する関数
データの更新 =関数( {},
//管理図を作成する
obj = dt <<管理図ビルダー(
変数( Y( :摩耗 ) )、
チャート(
位置( 1 )、
ポイント( 統計( "個人" ))、
限界( シグマ( 「可動範囲」 ))
)、
チャート(
位置( 2 )、
ポイント( 統計( 「可動範囲」 ))、
限界( シグマ( 「可動範囲」 ))
)
);
//一時管理図ウィンドウを非表示にする
オブジェクト <<ショーウィンドウ( 0 );
// 既存/古いグラフをウィンドウから削除します (存在する場合)
試す( (ホルダー <<子供) <<消去);
// 新しいグラフを追加します
ホルダー <<追加(( H リストボックス( (オブジェクト <<報告) <<クローンボックス)));
//一時管理図を閉じる
オブジェクト <<ウィンドウを閉じる;
);
//新しい管理図を表示するウィンドウと、グラフを更新するボタンを開きます
//上記のスクリプトを実行するボタンが含まれています。
nw =新しい窓( "管理図" 、
V リストボックス(
ボタンボックス( 「新しいデータ」 、UpdateData() )、
ホルダー = H リストボックス();
)
);
// 最初のチャートをウィンドウにロードします (関数内でスクリプトを実行します)。
UpdateData();
);
クイックスクリプト;
Re: データ更新時に管理図表示をフリーズする方法ありがとう。 私はウィンドウ スケジューラを使用してこのスクリプトを実行し、データが読み取られた後 (たとえば 15 秒程度) に 1 つのグラフを表示したいと考えています。 「管理図」はたくさんあります)。 あなたの例を試してみましたが、それをウィンドウタスク(スケジュール機能でもあります)に設定すると、多くの「管理図」1、2、3、...が得られます。 とにかくチャートでしか手に入らないものはありますか?
以下は私が使用しているものです。 ありがとう
//チャートを更新する関数
データの更新 =関数( {},
//管理図を作成する
obj = dt <<管理図ビルダー(
変数( Y( :摩耗 ) )、
チャート(
位置( 1 )、
ポイント( 統計( "個人" ))、
限界( シグマ( 「可動範囲」 ))
)、
チャート(
位置( 2 )、
ポイント( 統計( 「可動範囲」 ))、
限界( シグマ( 「可動範囲」 ))
)
);
//一時管理図ウィンドウを非表示にする
オブジェクト <<ショーウィンドウ( 0 );
// 既存/古いグラフをウィンドウから削除します (存在する場合)
試す( (ホルダー <<子供) <<消去);
// 新しいグラフを追加します
ホルダー <<追加(( H リストボックス( (オブジェクト <<報告) <<クローンボックス)));
//一時管理図を閉じる
オブジェクト <<ウィンドウを閉じる;
);
//新しい管理図を表示するウィンドウと、グラフを更新するボタンを開きます
//上記のスクリプトを実行するボタンが含まれています。
nw =新しい窓( "管理図" 、
V リストボックス(
ボタンボックス( 「新しいデータ」 、UpdateData() )、
ホルダー = H リストボックス();
)
);
// 最初のチャートをウィンドウにロードします (関数内でスクリプトを実行します)。
UpdateData();
);
クイックスクリプト;
Re: データ更新時に管理図表示をフリーズする方法ここで私は間違った方向に進んでいるかもしれませんが、新しいデータが表示されたときにウィンドウ内のグラフをその下/後に追加するのではなく置き換えたいと思います。これを行うには、新しいグラフを追加する前に古いグラフを削除します。以下に例を示します。
names default to here( 1 );
//Open sample data
dt = Open("$SAMPLE_DATA/Abrasion.jmp");
//A variable used to hide part of the data
lastrow = 10;
//Hide data after the last row (simulates a smaller table)
df = dt << Data Filter(
Location( {696, 15} ),
Mode( Select( 0 ), Show( 1 ), Include( 1 ) ),
Add Filter(
columns( Transform Column( "Row", Formula( Row() ) ) ),
Where(
Transform Column( "Row", Formula( Row() ) ) <= lastrow
)
)
);
//A function that will update the chart
UpdateData = function( {},
//Add one row to the data table
lastrow++;
//Update the data filter (simulates getting more data)
df << Delete All;
df << Add Filter(
columns( Transform Column( "Row", Formula( Row() ) ) ),
Where(
Transform Column( "Row", Formula( Row() ) ) <= lastrow
)
);
//Make the control chart
obj = dt << Control Chart Builder(
Variables( Y( :Abrasion ) ),
Chart(
Position( 1 ),
Points( Statistic( "Individual" ) ),
Limits( Sigma( "Moving Range" ) )
),
Chart(
Position( 2 ),
Points( Statistic( "Moving Range" ) ),
Limits( Sigma( "Moving Range" ) )
)
);
//Hide the temporary control chart window
obj << ShowWindow(0);
//Remove existing/old graph from the window (if there is one)
Try( (holder << Child) << Delete );
//Add the new graph
holder << Append(( H List Box( (obj << Report) << Clone Box)));
//Close the temporary control chart
obj << Close Window;
);
//Open a window to show the new control chart and a button to refresh the chart
//Includes a button to run the script above.
nw = New Window("Control Chart",
V List Box(
Button Box("New Data", UpdateData() ),
holder = H List Box();
)
);
//Load the first chart in the window (run the script in the function)
UpdateData();