異なる N の繰り返し値を持つグループ化された x 軸を持つ変動チャートに、共有 y 軸を持つ動的な水平線を追加するにはどうすればよいでしょうか?こんにちは、みんな、
前回の投稿に基づいて差別化するために、新しいスレッドを作成したいと考えました: https://community.jmp.com/t5/Discussions/How-to-add-Dynamic-horizo ntal-line-by-shared-y-axis-among/mp/622722 。変動チャート全体に動的な水平線が必要な場合にも同じアイデアが適用されますが、x ごとに 1 つの値があるため連想配列を使用する以前のソリューションとは異なり、このケースでは、x ごとに複数の値がグループ化される可能性があり、N が条件間で分割され、そのように描画する必要があるため、x あたりの N に基づくグラフ作成は機能しません。これが、その方法を理解するのに苦労しているところです。可能であれば、グラフ スクリプトの経験が豊富な方にご協力いただければ幸いです。以下は、たとえば手描きの線を使用した目的の出力であり、グラフを生成するコードも以下にあります。
以下の例では、トヨタは :Protection に分割され、グループ化では N=8 と N=3 になり、同様にフォードは N=11 と N=3 になります。そして、トヨタ グループとフォード グループの両方に、赤と青の線で示すように Max(:Wt) の値を持つ水平線があり、その他すべてに紫の線で示すように同様に一意の線があることを確認したいと思います。これを実現する方法についてのアイデアがあれば、ぜひ教えてください。投稿の下部に、グループ化とグラフ化のための優れたテンプレートとして@ErraticAttackによって提供されたコードが掲載されていますが、これは連想配列であるため、トヨタは N: 8+3 = 11、同様にフォードは 11+3=14 の幅となり、範囲が分割されているためグラフ化が間違っています。 
dt = Open( "$SAMPLE_DATA/Cars.jmp" );
rpt = dt << Variability Chart(
Y( :Head IC),
X( :Protection, :Make, :Model ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
By( :NAME("D/P")),
);@ErraticAttackのコードは私の以前の質問に役立ちます。
names default to here(1);
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Cars.jmp" );
rpt = dt << Variability Chart(
Y( :Head IC),
X( :Make, :Model ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
Where( :NAME("D/P") == "Driver" & :Protection == "manual belts" ),
);
//find groupings:
rows = dt << Get Rows Where( :NAME("D/P") == "Driver" & :Protection == "manual belts" );
subt = dt << Subset( Rows( rows ), Columns( :Make, :Model, :Wt ), Not Linked, Private );
sumt = subt << Summary( Group( :Make, Model ), Mean( :Wt ), Statistics Column Name Format( "Column" ), Link to Original Data Table( 0 ), Private );
Close( subt, No Save );
subt = sumt << Summary( Group( :Make ), Mean( :Wt ), Statistics Column Name Format( "Column" ), Link to Original Data Table( 0 ), Private );
Close( sumt, No Save );
category number = [=>];
category average = [=>];
For Each Row( subt,
category number[:Make] = :N Rows; // each least-significant category in a VariabilityPlot is exactly X=1 width on the hidden x-axis, starting at zero
category average[:Make] = :Wt
);
Close( subt, No Save );
tree = rpt << Report;
Eval( Eval Expr(
tree[FrameBox( 1 )] << Add Graphics Script(
Local( {values = Expr( category average ), numbers = Expr( category number ), i, items, sum = 0},
items = numbers << Get Keys;
Pen Size( 2 );
Pen Color( "Blue" );
Summation( i = 1, N Items( items ),
Line( Eval List( {sum, values[items[i]]} ), Eval List( {sum += numbers[items[i]], values[items[i]]} ) );
0
)
)
)
) )ありがとうございます。どんな助けでも本当に感謝しています!
自動化とスクリプト基本的なデータ分析とモデリングデータの探索と視覚化マスカスタマイゼーションウィンドウズRe: 異なる N の繰り返し値を持つグループ化された x 軸を持つ変動グラフに、共有 y 軸を持つ動的な水平線を追加するにはどうすればよいでしょうか?ありがとう、ジム!
Re: 異なる N の繰り返し値を持つグループ化された x 軸を持つ変動グラフに、共有 y 軸を持つ動的な水平線を追加するにはどうすればよいでしょうか?37行目では、
fb = Report(varchart)[i][FrameBox(1)];
に
fb = Report( varchart[i] )[FrameBox( 1 )];
Re: 異なる N の繰り返し値を持つグループ化された x 軸を持つ変動グラフに、共有 y 軸を持つ動的な水平線を追加するにはどうすればよいでしょうか?こんにちは@jthi さん
解決策をありがとうございます。非常にエレガントな回答です。おっしゃるとおり、これは 1 つのフレームボックスのみに適用され、理想的には変動チャートが生成する両方のフレームボックスで機能するようにしたいと思います。コードをこれに適応させましたが、水平線を両方に表示させるのに苦労しています。エラーが表示され、対処方法がわかれば、非常に助かります。ありがとうございます!
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cars.jmp");
varchart = dt << Variability Chart(
Y(:Head IC),
X(:Protection, :Make, :Model),
Analysis Type("Choose best analysis (EMS REML Bayesian)"),
Show Range Bars(0),
Show Cell Means(0),
Std Dev Chart(0),
Points Jittered(1),
By(:"D/P"n)
);
dt << new column("Group", Character, Nominal, Formula(
:"D/P"n || :Protection || :Make // don't add model here
));
dt_summary = dt << Summary(
Group(:Group),
Max(:Wt),
N Categories(:Model),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0),
//Invisible
);
uniq = Associative Array( Column( dt, "D/P" ) << GetValues ) << GetKeys;
for(i = 1, i <= N Items(uniq), i++,
dt_summary_subset = dt_summary << Subset( Rows( dt_summary << get rows where(Substr(:Group, 1, Length(uniq[i])) == uniq[i])),
Columns(), Not Linked);
weights = dt_summary_subset[0, "Wt"];
counts = dt_summary_subset[0, "Model"];
fb = Report(varchart)[i][FrameBox(1)];
Eval(Eval Expr(
fb << Add Graphics Script(
Local({refs = Expr(weights), counts = Expr(counts), i, sum = 0},
Pen Size(2);
Pen Color("Blue");
Summation(i = 1, N Items(counts),
Line(Eval List({sum, refs[i]}), Eval List({sum += counts[i], refs[i]}));
);
)
)
));
);Re: 異なる N の繰り返し値を持つグループ化された x 軸を持つ変動グラフに、共有 y 軸を持つ動的な水平線を追加するにはどうすればよいでしょうか?非常に簡単なオプションの 1 つは、グループに新しい列を作成することです。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cars.jmp");
// for simplicity sake we drop Passenger
rows_to_delete = dt << Get Rows Where(:"D/P"n == "Passenger");
dt << Delete Rows(rows_to_delete);
varchart = dt << Variability Chart(
Y(:Head IC),
X(:Protection, :Make, :Model),
Analysis Type("Choose best analysis (EMS REML Bayesian)"),
Show Range Bars(0),
Show Cell Means(0),
Std Dev Chart(0),
Points Jittered(1),
By(:"D/P"n)
);
dt << new column("Group", Character, Nominal, Formula(
:"D/P"n || :Protection || :Make // don't add model here
));
dt_summary = dt << Summary(
Group(:Group),
Max(:Wt),
N Categories(:Model),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0),
Invisible
);
weights = dt_summary[0, "Wt"];
counts = dt_summary[0, "Model"];
Close(dt_summary, no save);
fb = Report(varchart)[FrameBox(1)];
Eval(Eval Expr(
fb << Add Graphics Script(
Local({refs = Expr(weights), counts = Expr(counts), i, sum = 0},
Pen Size(2);
Pen Color("Blue");
Summation(i = 1, N Items(counts),
Line(Eval List({sum, refs[i]}), Eval List({sum += counts[i], refs[i]}));
);
)
)
));
この例では、他のD/Pが削除されているため、フレームボックスが1つしかないことに注意してください。