(1) AxisBox のデフォルトの色を変更し、(2) グループ化された Y プロットの 1 つの Y 軸変数にのみ参照線を追加するにはどうすればよいですか?以下のスクリプトで生成されたチャートで、赤い矢印で示された線 (「区切り線」) の色を紫に変更したいと思います。 また、Y 軸の最下位変数 (この場合は PNP1) にのみ水平基準線を追加したいと考えています。
JSL 経由でこれらを行うにはどうすればよいでしょうか?
(私の実際のケースでは、この例の場合とは異なり、y 軸のデータは列からのものではないことに注意してください)
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
Graph Builder(
Size( 960, 695 ),
Variables(
X( :SITE ),
X( :lot_id, Position( 1 ) ),
X( :wafer, Position( 1 ) ),
Y( :NPN1 ),
Y( :NPN2 ),
Y( :PNP3 ),
Y( :PNP1 )
),
Elements( Position( 1, 1 ), Points( X( 1 ), X( 2 ), X( 3 ), Y, Legend( 44 ) ) ),
Elements( Position( 1, 2 ), Points( X( 1 ), X( 2 ), X( 3 ), Y, Legend( 43 ) ) ),
Elements( Position( 1, 3 ), Points( X( 1 ), X( 2 ), X( 3 ), Y, Legend( 38 ) ) ),
Elements( Position( 1, 4 ), Points( X( 1 ), X( 2 ), X( 3 ), Y, Legend( 40 ) ) ),
SendToReport(
Dispatch(
{},
"SITE",
ScaleBox,
{Label Row( 3, {Major Grid Line Color( 8 ), Show Major Grid( 1 )} )}
)
)
);
自動化とスクリプト作成ウィンドウズRe: (1) AxisBox のデフォルトの色を変更し、(2) グループ化された Y プロットの 1 つの Y 軸変数にのみ参照線を追加するにはどうすればよいですか?垂直線と軸ラベルを色でリンクするという素晴らしいアイデア:)
残念ながら、線が非常に細いため、特徴に気づくのは困難です。
同じ気持ちをお持ちの方は、ぜひこの願いを応援してください。
階層 X カテゴリの最適化されたグラフィック設定 - 2 つのオプション

あるいは、サイトを X グループとして使用することもできますが、同期された X 軸ラベルで問題が発生する可能性が高くなります。
この問題を解決したいという要望もあります。
X グループ: 軸上の値をそれぞれのグループに制限します。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
dt << Graph Builder(
Size( 841, 485 ),
Show Control Panel( 0 ),
Show Title( 0 ),
Show X Axis Title( 0 ),
Variables(
X( :SITE ),
X( :lot_id, Position( 1 ) ),
X( :wafer, Position( 1 ) ),
Y( :NPN1 ),
Y( :NPN2 ),
Y( :PNP3 ),
Y( :PNP1 )
),
Elements( Position( 1, 1 ), Points( X( 1 ), X( 2 ), X( 3 ), Y, Legend( 44 ) ) ),
Elements( Position( 1, 2 ), Points( X( 1 ), X( 2 ), X( 3 ), Y, Legend( 43 ) ) ),
Elements( Position( 1, 3 ), Points( X( 1 ), X( 2 ), X( 3 ), Y, Legend( 38 ) ) ),
Elements( Position( 1, 4 ), Points( X( 1 ), X( 2 ), X( 3 ), Y, Legend( 40 ) ) ),
SendToReport(
Dispatch( {}, "SITE", ScaleBox,
{Label Row(
1,
{Lower Frame( 1 ), Row Title Side( "Start" ), Show Major Grid( 0 ),
Tick Mark Style( "Long Divider" )}
), Label Row(
2,
{Lower Frame( 1 ), Row Title Side( "Start" ), Show Major Grid( 0 ),
Tick Mark Style( "Long Divider" )}
), Label Row(
3,
{Line Color( "Purple" ), Lower Frame( 1 ), Major Grid Line Color( "Purple" ),
Row Title Side( "Start" ), Tick Mark Style( "Long Divider" )}
)}
),
Dispatch( {}, "PNP1", ScaleBox, {Add Ref Line( 300, "Solid", "Black", "", 5 )} ),
Dispatch( {}, "Graph Builder", FrameBox( 4 ), {Reference Line Order( 3 )} )
)
)
Re: (1) AxisBox のデフォルトの色を変更し、(2) グループ化された Y プロットの 1 つの Y 軸変数にのみ基準線を追加するにはどうすればよいですか?あなたはどういう意味ですか
@ネオ書きました:(私の実際のケースでは、この例の場合とは異なり、y 軸のデータは列からのものではないことに注意してください)
Re: (1) AxisBox のデフォルトの色を変更し、(2) グループ化された Y プロットの 1 つの Y 軸変数にのみ基準線を追加するにはどうすればよいですか?@ほぎ
>> (私の実際のケースでは、この例の場合とは異なり、y 軸のデータは列からのものではないことに注意してください)
私の実際のケースでは、y 軸パラメータは行パラメータのローカル データ フィルタ選択から取得されます。
(列からのものであれば、基準線の仕様に制限を設定できた可能性があります (これを試したわけではありませんが、機能すると期待しています))
デモ用のデータセットを作成できるかどうか見てみましょう (また戻ってきます
)。
Re: (1) AxisBox のデフォルトの色を変更し、(2) グループ化された Y プロットの 1 つの Y 軸変数にのみ基準線を追加するにはどうすればよいですか?こんにちは@ネオ、
そのコードは、 @ほぎ投稿すると、グラフビルダー内の単一のサブプロットの参照線を取得する問題が解決されますが、残念ながら、ツリー構造を見ると、x-のその1行のみを変更するコマンドを送信する方法がわかりません。軸。 ツリー構造では、X 軸全体が 1 つの AxisBox(1) 要素にグループ化されており、グラフ ビルダーでそのように表示されていても、分割されてネストされていません。 また、環境設定内でネストされた軸線を変更できるものは見つかりませんでした。
いつでも、必要な軸を右クリックして基準線を追加し、グラフ ビルダーの横にある赤いホットボタンに移動してスクリプトをスクリプト ウィンドウに保存できます。これにより、スクリプトがどのように変更されるかを確認できます。行の追加。
お役に立てれば!、
DS
編集: ネストされた軸の色を変更できるようにするリクエストを送信することは価値があるかもしれません。 これは実行可能なはずであり、多くの人が恩恵を受けることができると思います。
Re: (1) AxisBox のデフォルトの色を変更し、(2) グループ化された Y プロットの 1 つの Y 軸変数にのみ基準線を追加するにはどうすればよいですか?どの行が問題ですか?
現時点では、一番下のプロットには水平線が 1 本だけあります。
参照線の一部を非表示にする必要がある場合は、各サブプロットに独自のカスタマイズ設定があることを利用して、長方形を追加して参照線の前に配置できます。
[あるいは、カスタマイズ スクリプトを直接使用して線分を追加することもできます。]

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
dt << Graph Builder(
Show Control Panel( 0 ),
Show Title( 0 ),
Show X Axis Title( 0 ),
Variables(
X( :SITE ),
X( :lot_id, Position( 1 ) ),
X( :wafer, Position( 1 ) ),
Y( :NPN1 ),
Y( :NPN2 ),
Y( :PNP3 ),
Y( :PNP1 )
),
Elements( Position( 1, 1 ), Points( X( 1 ), X( 2 ), X( 3 ), Y, Legend( 44 ) ) ),
Elements( Position( 1, 2 ), Points( X( 1 ), X( 2 ), X( 3 ), Y, Legend( 43 ) ) ),
Elements( Position( 1, 3 ), Points( X( 1 ), X( 2 ), X( 3 ), Y, Legend( 38 ) ) ),
Elements( Position( 1, 4 ), Points( X( 1 ), X( 2 ), X( 3 ), Y, Legend( 40 ) ) ),
SendToReport(
Dispatch( {}, "SITE", ScaleBox,
{Add Ref Line( 714.422378299564, "Solid", "Red", "", 4 ),
Label Row(
1,
{Lower Frame( 1 ), Row Title Side( "Start" ), Show Major Grid( 0 ),
Tick Mark Style( "Long Divider" )}
), Label Row(
2,
{Lower Frame( 1 ), Row Title Side( "Start" ), Show Major Grid( 0 ),
Tick Mark Style( "Long Divider" )}
), Label Row(
3,
{Line Color( "Purple" ), Line Width( 3 ), Lower Frame( 1 ),
Major Grid Line Color( "Purple" ), Row Title Side( "Start" ),
Tick Mark Style( "Long Divider" )}
)}
),
Dispatch( {}, "PNP3", ScaleBox, {Add Ref Line( 135, "Solid", "Red", "", 3 )} ),
Dispatch( {}, "PNP1", ScaleBox, {Add Ref Line( 300, "Solid", "Black", "", 5 )} ),
Dispatch( {}, "400", ScaleBox,
{Legend Model( 38, Properties( 0, {Transparency( 0.5 )}, Item ID( "PNP3", 1 ) ) )}
),
Dispatch( {}, "Graph Builder", FrameBox,
{Grid Line Order( 2 ), Reference Line Order( 1 ),
Add Graphics Script(
2,
Description( "" ),
Fill Color( white );
Rect( -10000, 10000, 10000, -10000, 1 );
)}
),
Dispatch( {}, "Graph Builder", FrameBox( 2 ),
{Grid Line Order( 2 ), Reference Line Order( 1 ),
Add Graphics Script(
2,
Description( "" ),
Fill Color( white );
Rect( -10000, 10000, 10000, -10000, 1 );
)}
),
Dispatch( {}, "Graph Builder", FrameBox( 3 ),
{Grid Line Order( 2 ), Reference Line Order( 1 ),
Add Graphics Script(
2,
Description( "" ),
Fill Color( white );
Rect( 290, 10000, 10000, -10000, 1 );
)}
),
Dispatch( {}, "Graph Builder", FrameBox( 4 ), {Reference Line Order( 3 )} )
)
)
Re: (1) AxisBox のデフォルトの色を変更し、(2) グループ化された Y プロットの 1 つの Y 軸変数にのみ基準線を追加するにはどうすればよいですか?@ホギ@SDF1私の実際のデータに似た、調理されたデータ テーブル (内部にプロット スクリプトが含まれている) を添付します。 ローカル データ フィルターでテスト ステージ 3 が選択されている場合にのみ、基準線 (下の赤色) が表示されるようにしたいと考えています。
(参照線の y 位置は事前定義されています)

Re: (1) AxisBox のデフォルトの色を変更し、(2) グループ化された Y プロットの 1 つの Y 軸変数にのみ参照線を追加するにはどうすればよいですか?@SDF1

これは、すべてのサブプロットに参照線を追加しますが、これは私が望むものではありません。
Re: (1) AxisBox のデフォルトの色を変更し、(2) グループ化された Y プロットの 1 つの Y 軸変数にのみ基準線を追加するにはどうすればよいですか?これは、Y グループによりグラフが異なる FrameBox に分割される簡単なケースです。 その後、カスタマイズを使用して個々の基準線を追加するだけです。

Graph Builder(
Y Group Edge( "Left" ),
Variables( X( :PartNumber ), Y( :Median ), Group Y( :TestStage ) ),
Elements( Points( X, Y, Legend( 33 ) ), Smoother( X, Y, Legend( 34 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox( 3 ),
{Add Graphics Script(
2,
Description( "" ),
Pen Color( "red" );
Pen Size( 3 );
Y Function( 0.4, x );
)}
)
)
)Re: (1) AxisBox のデフォルトの色を変更し、(2) グループ化された Y プロットの 1 つの Y 軸変数にのみ参照線を追加するにはどうすればよいですか?こんにちは@ネオ、
私は次のようにします@ホギ対象のグラフを右クリックして [カスタマイズ] オプションを使用し、「+」をクリックして新しいスクリプトを GB に追加し、追加する JSL を行に入力します。



さて、これをローカル データ フィルターに動的に応答させるのは、より困難になると思います。 そのような機能が必要な場合は、代わりに、グラフ ビルダーが組み込まれた独自のレポート ウィンドウを生成し、チェック ボックスを使用して、ユーザーが別の TestStage チェック ボックスを選択したときに参照線でサブプロットを更新するオプションを提供するかもしれません。
ネストされた線の色も変更する方法を考え出しました。 これが「正しい」方法なのか、それとも最も速い方法なのかはわかりませんが、ネストされた軸を右クリックして [プロパティの表示] を選択した場合、またはネストされた軸をクリックして [プロパティの表示] をクリックした場合、 AxisBox の横にある赤いホットボタンで、[軸設定のコピー] を選択すると、それをスクリプト ウィンドウに貼り付けて編集できます。 対象の軸を選択し、線の色を「なし」から任意の色に変更します。 次に、この編集したコードをコピーし、赤いホットボタンに戻り、[軸設定の貼り付け] を選択する必要があります。これにより、グラフが更新されます。 これで仕事は完了しますが、これを動的に行う方法がわかりません。



対応するスクリプトをスクリプト ウィンドウに保存すると、目的の結果を得るためにグラフ ビルダーとラベル行を送信するために必要なコマンドが表示されます。
Graph Builder(
Size( 592, 526 ),
Y Group Edge( "Left" ),
Graph Spacing( 4 ),
Variables(
X( :TestStage ),
X( :TestParameter, Position( 1 ) ),
Y( :Median ),
Group Y( :TestStage )
),
Elements(
Points( X( 1 ), X( 2 ), Y, Legend( 33 ) ),
Smoother( X( 1 ), X( 2 ), Y, Legend( 34 ) )
),
Local Data Filter(
Conditional,
Add Filter( columns( :TestStage ), Where( :TestStage == {1, 2, 3} ) )
),
SendToReport(
Dispatch(
{},
"TestStage",
ScaleBox,
{Label Row( 2, Line Color( "Purple" ) )}
),
Dispatch(
{},
"Graph Builder",
FrameBox( 3 ),
{Add Graphics Script(
2,
Description( "" ),
Pen Color( "red" );
Pen Size( 3 );
Y Function( 0.3, x );
)}
)
)
);この情報を使用して、Semiconductor Capability.jmp ファイルを使用して元の投稿に戻ると、当初求めていたものを達成できます。ネストされた軸は紫色、垂直グリッド線は紫色で、基準線のみが存在します。一番下のグラフ。 この特定のケースでは、グラフ ビルダーのサブプロットに異なる列をプロットしているため、基準線を追加する軸をダブルクリックすると機能します。 共有したサンプル データ テーブルの場合は、Customize を使用して Y Function() を追加するという別の方法で行う必要があります。

上記のグラフを生成した JSL コードは次のとおりです。 特定のケースに応じて、どこを適切に編集する必要があるかがわかります。
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
dt<<GRAPH builder=""></GRAPH>
お役に立てれば!、
DS
Re: (1) AxisBox のデフォルトの色を変更し、(2) グループ化された Y プロットの 1 つの Y 軸変数にのみ参照線を追加するにはどうすればよいですか?値自体から平均を計算できます。
Graph Builder(
Y Group Edge( "Left" ),
Variables( X( :PartNumber ), Y( :Median ), Group Y( :TestStage ) ),
Elements( Points( X, Y, Legend( 33 ) ), Smoother( X, Y, Legend( 34 ) ) )
);
myFB = Current Report()[FrameBox( 3 )];
myFB << Add Graphics Script(
2,
Description( "" ),
<STRONG> mySeg = myFB << Find Seg( Marker Seg( 1 ) );
value = Mean( mySeg << Get Y Values );</STRONG>
Pen Color( "red" );
Pen Size( 3 );
Y Function( value, x );
);
Re: (1) AxisBox のデフォルトの色を変更し、(2) グループ化された Y プロットの 1 つの Y 軸変数にのみ基準線を追加するにはどうすればよいですか?@SDF1ありがとう。 ネストされた軸の色を紫に変更する方法を確認します。 その間に私が使ったのは@ホギ提案と Make Filter Change Handler () を使用して、ユーザーがフィルター選択を変更するときに JMP が参照線を配置する場所を動的に変更します。 これに関する2つの問題がまだ解決されていません。
1. フィルター変更ハンドラーは、チャートが初めてプロットされるときはトリガーされず、次の TestStage が選択されたときにのみトリガーされます。
2. フィルターを変更すると、以前の基準線が別のテスト ステージに残ります。その理由は理解していますが、まだ削除できません。
Names Default To Here (1);
clear log ();
gb = Graph Builder(
Y Group Edge( "Left" ),
Variables( X( :PartNumber ), Y( :Median ), Group Y( :TestStage ) ),
Elements( Points( X, Y, Legend( 33 ) ), Smoother( X, Y, Legend( 34 ) ) ),
Local Data Filter(
Conditional,
Add Filter( columns( :TestStage ), Where( :TestStage == {1} ) )
)
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
getTestStage = Function( {this}, //print (this);
testStateFiltered = Associative Array(:TestStage [ldf << get filtered rows]) << get keys;
gb << SendToReport(
Dispatch({},"Graph Builder",
FrameBox(N Items (testStateFiltered)), {Add Graphics Script( 2, Description( "" ), Pen Color( "red" ); Line Style ("dashed"); Pen Size( 0.25 );
Y Function( 0.2, x );
)}
)
);
show (N Items (testStateFiltered)); Print(testStateFiltered);
);
rs = ldf << Make Filter Change Handler( getTestStage() ); Re: (1) AxisBox のデフォルトの色を変更し、(2) グループ化された Y プロットの 1 つの Y 軸変数にのみ基準線を追加するにはどうすればよいですか?ところで、Jmp17 には新しい機能があります。
統計値に基づいて動的な基準線を追加する
Graph Builder(
Y Group Edge( "Left" ),
Summary Statistic( "Median" ),
Variables( X( :PartNumber ), Y( :Median ), Group Y( :TestStage ) ),
Elements(
Points( X, Y, Legend( 33 ) ),
Smoother( X, Y, Legend( 34 ) ),
Caption Box(
X,
Y,
<STRONG> Summary Statistic( "Median" ),
Location( "Axis Reference Line" )</STRONG>
)
),
Local Data Filter(
Conditional,
Add Filter( columns( :TestStage ), Where( :TestStage == 1 ) )
)
)
Re: (1) AxisBox のデフォルトの色を変更し、(2) グループ化された Y プロットの 1 つの Y 軸変数にのみ基準線を追加するにはどうすればよいですか?こんにちは@ネオ、
それはとても素晴らしいアイデアです@ホギフィルター変更ハンドラーの使用に関するものです。 それは考えもしませんでした。 上記のコードを変更して、抱えていた 2 つの問題を修正しました。 スクリプトは、複数のデータ フィルターを選択した場合でも、基準線を含む最初のグラフを作成し、それに応じて各グラフを更新します。 これで問題は解決しますか?
Names Default To Here( 1 );
dt = Current Data Table();
//this creates a string list of the column names
ColNamesList = dt << Get Column Names( "string" );
//This tests if the there exist a :Mean Column. If not, it runs a summary to generate this data, updates the main table with the means and then deletes a column and closes out the summary table.
If( Contains( ColNamesList, "Mean" ) == 0,
dtMeans = dt << Summary(
Group( :TestParameter ),
Mean( :Median ),
Freq( "None" ),
Weight( "None" ),
statistics column name format( "stat" ),
Link to original data table( 0 ),
output table name( "MeanStats" )
);
dt << Update( With( dtMeans ), Match Columns( :TestParameter = :TestParameter ) );
dt << Delete Columns( :N Rows );
Close( dtMeans, NoSave );
);
//this makes the original graph with the reference line of the first row in column :Mean
gb = dt << Graph Builder(
Y Group Edge( "Left" ),
Variables( X( :PartNumber ), Y( :Median ), Group Y( :TestStage ) ),
Elements( Points( X, Y, Legend( 33 ) ), Smoother( X, Y, Legend( 34 ) ) ),
Dispatch(
{},
"Graph Builder",
FrameBox( N Items( testStateFiltered ) ),
{Add Graphics Script(
2,
Description( "" ),
Pen Color( "red" );
Line Style( "dashed" );
Pen Size( 0.25 );
Y Function( Eval( :Mean[1] ), x );
)}
),
Local Data Filter( Conditional, Add Filter( columns( :TestStage ), Where( :TestStage == 1 ) ) )//no {} around the 1 here.
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
getTestStage = Function( {this}, //print (this);
testStateFiltered = Associative Array( :TestStage[ldf << get filtered rows] ) << get keys;
//this finds which row to grab the mean from
mrows = dt << Get Rows where( :TestStage == testStateFiltered[1] );
//this defines the mean to Eval() in the Y Function()
gbmean = :Mean[mrows[1]];
If( N Items( testStateFiltered ) == 1, //only does this if only one data filter is selected
gbreport = gb << Report; //makes a report reference for the graph builder
fb = gbreport[GraphBuilderComponentBox( 17 )];//accesses the frame to remove the script from
fb << Remove Graphics Script( 1 );//removes most recent script from the frame
);
gb << SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox( N Items( testStateFiltered ) ),
{Add Graphics Script(
2,
Description( "" ),
Pen Color( "red" );
Line Style( "dashed" );
Pen Size( 0.25 );
Y Function( Eval( GBMean ), x );
)}
)
);
Show( N Items( testStateFiltered ) );
Print( testStateFiltered );
);
rs = ldf << Make Filter Change Handler( getTestStage() );
お役に立てれば!、
DS
Re: (1) AxisBox のデフォルトの色を変更し、(2) グループ化された Y プロットの 1 つの Y 軸変数にのみ基準線を追加するにはどうすればよいですか?初めて、実行できますgetテストステージ(1)手動で。
データ フィルターを使用すると、GraphBuilder に 1 ~ 3 個の FrameBox が存在することに注意してください (ほとんどの場合、1 つだけ?)。 したがって、メッセージを送信する FB を決定するか、TestStage を 1 つ選択して常にコマンドをフレームボックス 1 に送信します。
Re: (1) AxisBox のデフォルトの色を変更し、(2) グループ化された Y プロットの 1 つの Y 軸変数にのみ基準線を追加するにはどうすればよいですか?@SDF1 @ホギ
私が共有したデータ テーブルは、例として簡単にまとめたものです。 基準線の生成には、この表の LSL/USL やその他の数値を使用できないことを述べておくべきでした。
いずれにせよ、以下は私にとってうまくいきました。
- 電話をかけるMake Filter Change Handler 呼び出しの前に getTestStage(1)。
- getTestStage 関数内に適切なハンドルを持つ RemoveGraphicsScript (N) を追加します。ここで、N は、最後に選択された TestStage から取得した FrameBox 番号です。TestStage フィルターが変更されたときに生成されるフレームボックス番号です。
もうこれで落ち着きます。 ただし、問題が 1 つ残っています。 TestStage を 1 つ選択し、次に 2 つ目、そして 3 つ目を選択すると、すべてが期待どおりに機能しますが、3 つの選択から 1 つに戻ると、スクリプトは期待どおりに機能しません。
機会があれば、問題を説明するスクリプトを含む代表的なデータセットを投稿します。