表の要約の各要素に基準線を付けてグラフをプロットする方法こんにちは、みんな、
表の概要の各要素の基準線を使用してグラフ(スクリプト、JMP 13)をプロットしようとしています(各名前+グレードのスコア対試行回数のグラフ、その後、x軸にスコアの25および75パーセンタイルの基準線を追加します)。 。 コメントをいただければ幸いです
| 名前 | 学年 | スコア | # 試す |
| 名前1 | あ | 80 | 2 |
| 名前1 | あ | 82 | 3 |
| 名前1 | B | 98 | 3 |
| 名前1 | C | 86 | 2 |
| 名前2 | あ | 88 | 3 |
| 名前3 | あ | 90 | 2 |
| 名前3 | あ | 88 | 1 |
| 名前3 | あ | 94 | 3 |
| 名前4 | B | 96 | 2 |
| 名前4 | B | 82 | 4 |
| 名前4 | あ | 100 | 1 |
| 名前4 | C | 92 | 2 |
| 名前5 | あ | 84 | 3 |
Re: 表の要約の各要素に基準線を付けてグラフをプロットする方法やあ@スピンアップ、
あなたが何を望んでいるのか理解できると思います。 しかし、私も少し混乱しています。9 つの個別の二変量グラフを要約したいのでしょうか、それとも単にグラフ化したいのでしょうか?
元のデータ テーブルを基に、二変量近似を行うと、9 つすべてのグラフを簡単に作成できます。例:
Bivariate(
Y( :Score ), X( :Name( "# try" ) ),
By( :Name, :Grade )
);
これにより、前の投稿で色付けした 9 つのグラフが生成されます。
次に、おそらく For ループを使用して分位数ライン (または影付きの領域) を生成する必要があります。
最初のグラフのスクリプトは次のようになります。
Bivariate(
Y( :Score ),
X( :Name( "# try" ) ),
Where( :Name == "name1" & :Grade == "A" ), // this would be selecting
SendToReport(
Dispatch(
{},
"2",
ScaleBox,
{Min( 75 ), Max( 100 ), Inc( 5 ), Minor Ticks( 1 ), // this sets the appearance of the y-axis
Add Ref Line( 83, "Solid", "Blue", "25th quantile", 1 ),
Add Ref Line( 95, "Solid", "Blue", "75th quantile", 1 )}
)
)
);実際、NameList={"Name1", "Name2"...} という名前のリストを設定するか、列要素からそれを取得する場合、For ループを挿入するだけで非常に短いスクリプトを作成できます。 NameList[i] 要素を参照します。 これは、Where(:Name==NameList[i] & Grade == GradeList[i]) の場合にも当てはまります。
もう 1 つのオプションは、上で含めた最初のスクリプトからの出力のツリー構造を検査し、9 つのグラフの y 軸ごとに AxisBox(i) を参照することです。 Y 軸はすべて奇数であるため、For ループを実行する場合は、ループ内で 1 から 3 、5 などを繰り返すように i++ を実行する必要があります。
リンク先には本当に良いものがいくつかあります@Craige_Hales提供された。
あなたの特定の問題については、ループを行う必要があると思います。 それか、すべてを一度手動で実行してから、スクリプトをデータ テーブル (おそらくグループとして) に保存し、それをコピー/ペーストして、新しいスクリプト ウィンドウに別の JSL ファイルとして保存することもできます。 手動で行う方法がわかれば、JMP が JSL を作成してくれるので、必要なのはそれをすべてマスター JSL ファイルにまとめるだけで、マスター JSL ファイルがすべて処理してくれます。 唯一の問題は、名前や列参照などを変更する場合です。 その場合は、ローカル変数の使用を開始する必要があります。
お役に立てれば!、
DS
Re: 表の要約の各要素に基準線を付けてグラフをプロットする方法たぶんこのようなもの
dtBigClass = Open( "$sample_data/big class.jmp" );
dtage = dtBigClass << Summary( Group( :age ) ); // makes a small table of unique ages
ages = dtage[0, 1]; // [12, 13, 14, 15, 16, 17]
Close( dtage, "nosave" ); // table no longer needed
grid = Lineup Box( N Col( 3 ), spacing( 20, 30 ) ); // Horz,Vert extra space between graphs in pixels
For( iAge = 1, iAge <= N Rows( ages ), iAge += 1, // for each age...
dtBigClass << selectwhere( age == ages[iAge] );
dtSubset = dtBigClass << subset( selectedrows( 1 ), linked( 1 ), "invisible" );
// the summary will be a single row with the requested information
dtSummary = dtSubset << Summary( Mean( :height ), Mean( :weight ), Std Dev( :height ), Std Dev( :weight ), Freq( "None" ), Weight( "None" ) );
// grab the values of interest in simpler variable names
heightMean = dtSummary:name( "Mean(height)" )[1]; // row one has the answers
heightStdDev = dtSummary:name( "Std Dev(height)" )[1];
weightMean = dtSummary:name( "Mean(weight)" )[1];
weightStdDev = dtSummary:name( "Std Dev(weight)" )[1];
Close( dtSummary, "nosave" ); // close the work table, no longer needed
// make a graph, attach to a borderbox so it does not open in a window...
bb = Border Box(
dtSubset << Graph Builder(
Size( 400, 300 ),
Show Control Panel( 0 ),
Show Legend( 0 ), // don't need a legend
Variables( X( :height ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 5 ) ) ),
// add ref lines. You can get a script like this GraphBuilder script by
// making a graph builder interactively, then using the red triangle->get script.
// below, the numbers in the script have been replaced with the variables above.
SendToReport(
Dispatch(
{},
"height",
ScaleBox,
{Add Ref Line( heightMean, "Dotted", "Red", "", 2 ), Add Ref Line( heightMean + heightStdDev, "Dotted", "Blue", "", 2 ),
Add Ref Line( heightMean - heightStdDev, "Dotted", "Blue", "", 2 ),
// force all axes to be the same...
Min( 48.2828947368421 ), Max( 75.8776488919668 ), Inc( 5 ), Minor Ticks( 1 )}
),
Dispatch(
{},
"weight",
ScaleBox,
{Add Ref Line( weightMean, "Dotted", "Red", "", 2 ), Add Ref Line( weightMean + weightStdDev, "Dotted", "Blue", "", 2 ),
Add Ref Line( weightMean - weightStdDev, "Dotted", "Blue", "", 2 ),
// force all axes to be the same...
Min( 55.2100840336134 ), Max( 188.127074359155 ), Inc( 20 ), Minor Ticks( 0 )}
),
Dispatch( {}, "Graph Builder", FrameBox, {Marker Size( 6 ), Transparency( 1 )} ), // make the markers bigger
Dispatch( {}, "graph title", TextEditBox, {Set Text( "Age = " || Char( ages[iAge] ) )} ), // add the age= title
Dispatch( {}, "Graph Builder", OutlineBox, {Set Title( "" )} ) // suppress the Graph Builder title
)
)
);
grid << append( bb ); // add the graph to the grid
); // the iAge loop
dtBigClass << clearRowStates; // undo the final selection
New Window( "the report", V List Box( H Center Box( Text Box( "Big Report", <<SETFONTSIZE></SETFONTSIZE>
Reports grouped in a 3-wide gridReports grouped in a 3-wide grid3 幅のグリッドにグループ化されたレポート
Re: 表の要約の各要素に基準線を付けてグラフをプロットする方法ありがとう@Craige_Halesリンクですが、私の主な問題は、それぞれに独自の基準線があるため、個々のグラフを出力するようにプログラムする方法です。より明確に、このデータテーブルの各色のグラフを生成する方法を疑問に思っています。

ありがとう!
Re: 表の要約の各要素に基準線を付けてグラフをプロットする方法関連する投稿は次のとおりです。 https://community.jmp.com/t5/JSL-Cookbook/Use-summary-to-Automatically-Add-Reference-Lines-to-Graph/ta-p/41709
Re: 表の要約の各要素に基準線を付けてグラフをプロットする方法ありがとう@SDF1ご返信いただきましたが、あまり明確でなくて申し訳ありません。 ここでもう少し詳しく説明したいと思います。
まず、独立して実行できるように、別のスクリプト ウィンドウでスクリプトを作成しようとしています。概要を取得しようとしているスクリプトの最初の部分は次のとおりです。
Names Default To Here( 1 );
dt = Current Data Table();
Summary = dt << Summary(
Group( :Name, :Grade ),
Median( :Score ),
// other statistics can be added here//
Link to Original Data Table( 0 )
);
出力は次のようになります。

ここで、私が本当に欲しいのは、9 つのグラフ (スコアと試行回数) (行ごとに 1 つ (N 行のデータポイントを持つ)) で、各グループの統計を使用して参照線に追加します (すべてスクリプトによって)。
グラフの例では、任意のグレードの name1 であることがわかります。
ありがとう
Re: 表の要約の各要素に基準線を付けてグラフをプロットする方法やあ@スピンアップ、
あなたが何をしたいのか完全に理解しているかどうかはわかりませんが、すべてを完全にスクリプト化するのは難しいかもしれません。 データ テーブルをしばらく保存しておく場合、またはデータ テーブルをロードする場合は、分析を個別に実行してからデータ テーブルに保存することをお勧めします。
全体をスクリプト化したい場合でも、25/75 分位数などを決定するために分析を実行する必要があります。
「スコアと試行回数」をグラフ化していると言うのは、「y を x で当てはめる」ことを行ったときのスコアが「y」で、「試行回数」が「x」になるという意味ですか?
また、表の集計というのは名前や学年でグループ化しながらスコアや#tryの平均を求めるということでしょうか? それとも、成績名を指定して表を作成し、スコアと #try 値の平均を求めるという意味ですか?
ただし、いくつかの方法があります。 私はあなたのテーブルを JMP に持ち込んで、私がやったことは次のとおりです (私があなたと同じように考えていると仮定して)。
名前で表にする (A、B、C は試行回数)。これは平均値を取得するのに役立ちますが、必要に応じてこれを個別にスクリプト化できます。

これを手元に置いて、二変量フィットまたはヒストグラムといういくつかの異なる方法でグラフ化しました (ヒストグラムには箱ひげ図からすぐに入手できる四分位情報がすでに含まれています)。その後、通常の方法で参照線を追加できます。


これらすべてをスクリプト化するには、必ずレッドホット ボタンを使用して実際の JSL スクリプトにアクセスし、必要なものを生成してください。 ただし、スクリプトをデータ テーブルに保存すると、データ テーブルを開くたびに緑色のホット ボタンをクリックして、すぐに再実行できます。
お役に立てれば!、
DS