棒グラフに境界線(アウトライン)を追加/カスタマイズする方法JMPコミュニティの皆様、こんにちは。
棒グラフの各棒にアウトライン/境界線を追加し、その幅をカスタマイズしたいのですが、JMPでこれを実現するにはどうすればよいですか?
下の画像に示すように、各バーの周囲に境界線またはアウトラインを追加したいと思います。

2つの棒グラフを重ねてアウトラインをシミュレートするという回避策があると聞いたことがありますが、この方法ではアウトラインの幅をカスタマイズできないようです。
グラフ ビルダー インターフェイスまたはスクリプトの編集によって、各バーにアウトラインを適用し、その色と幅を個別に変更する方法はありますか?
現在、JMP Student Edition 19 を使用しています。
ご協力をよろしくお願いします!
基本的なデータ分析とモデリングデータの探索と可視化Re: 棒グラフに境界線(アウトライン)を追加/カスタマイズする方法2つ目の棒グラフを使うのが解決策としては適切だと思いますが、高さを正しくするために追加の列を作成し、幅の比率を調整する必要があるため、多少の手間がかかります。この方法では既に実現できています。

以下は、実行してグラフがどのように作成されたかを確認できるサンプル スクリプトです (棒グラフの順序が変更され、幅の比率が変更され、色が変更されるなど)。
もっと見る...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << New Column("Mean[height][age]",
Numeric,
"Continuous",
Formula(Col Mean(:height, :age) + 1)
);
gb = dt << Graph Builder(
Size(656, 549),
Show Control Panel(0),
Variables(
X(:age),
Y(:height),
Y(:"Mean[height][age]"n, Position(1)),
Overlay(:age)
),
Elements(
Bar(X, Y(1), Legend(6), Bar Style("Stacked")),
Bar(X, Y(2), Legend(7), Bar Style("Stacked"))
),
SendToReport(
Dispatch({}, "400", ScaleBox,
{Legend Model(
7,
Base(0, 0, 0, Item ID("12", 1)),
Base(1, 0, 1, Item ID("13", 1)),
Base(2, 0, 2, Item ID("14", 1)),
Base(3, 0, 3, Item ID("15", 1)),
Base(4, 0, 4, Item ID("16", 1)),
Base(5, 0, 5, Item ID("17", 1)),
Type Properties(0, "Bar", {Fill Color(0)}),
Properties(0, {Fill Color(0)}, Item ID("12", 1)),
Properties(1, {Fill Color(0)}, Item ID("13", 1)),
Properties(2, {Fill Color(0)}, Item ID("14", 1)),
Properties(3, {Fill Color(0)}, Item ID("15", 1)),
Properties(4, {Fill Color(0)}, Item ID("16", 1)),
Properties(5, {Fill Color(0)}, Item ID("17", 1))
)}
),
Dispatch({}, "Graph Builder", FrameBox,
{Reorder Segs({1, 2, 4}), DispatchSeg(
BarSeg(1),
{Set Width Proportion(0.7)}
)}
),
Dispatch({}, "400", LegendBox,
{Legend Position({6, [0, 1, 2, 3, 4, 5], 7, [-1, -1, -1, -1, -1, -1]})}
)
)
);
Re: 棒グラフに境界線(アウトライン)を追加/カスタマイズする方法@jthiさん、良い解決策をありがとうございます。私はJMPのグラフィックプリミティブをよく使います。線や四角形を直接描画でき、色分けや太さの設定もできます。
これを実行する方法のドキュメントと例については、スクリプト インデックスおよびスクリプト ガイドの「グラフィック スクリプトの追加」を参照してください。
Re: 棒グラフに境界線(アウトライン)を追加/カスタマイズする方法他の(良い)選択肢としては、次のものがあります。
- グラフィックスクリプトを使用する。バーの数を把握しておく必要がありますが、BarSegオブジェクトからは取得できないと思います。そのため、グラフに補助マーカーを追加すると簡単に実現できます(最終的なプロットからは非表示にできます)。
- マーカー描画式を使用します。マーカーを追加する必要があり、実装はより困難ですが、より堅牢なオプションである可能性が高いです。
今はこれらのオプションを書き出す時間がありませんが、それらは存在します
Re: 棒グラフに境界線(アウトライン)を追加/カスタマイズする方法グラフィックスクリプトを作成する時間があった
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(656, 549),
Show Control Panel(0),
Variables(X(:age), Y(:height)),
Elements(
Bar(X, Y, Legend(4)),
Points(X, Y, Legend(5), Summary Statistic("Mean"))
),
SendToReport(
Dispatch({}, "400", ScaleBox,
{Legend Model(
5,
Type Properties(0, "Marker", {Transparency(0)}),
Properties(0, {Transparency(0)}, Item ID("Mean", 1))
)}
)
)
);
fb = Report(gb)[FrameBox(1)];
fb << Add Graphics Script(Function({this}, // can be laggy as it is a graphic script with a loop
ms = this << Find Seg(MarkerSeg(1));
xs = ms << Get X Values;
ys = ms << Get Y Values;
sideshift = 0.27;
For(i = 1, i <= N Items(xs), i++,
Pen Size(10); // Width of the line
Pen Color("Black");
Rect(xs[i] - sideshift, ys[i], xs[i] + sideshift, -1, 0);
);
));

そして、マーカー描画Exprです
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(656, 549),
Show Control Panel(0),
Variables(X(:age), Y(:height)),
Elements(
Bar(X, Y, Legend(4)),
Points(X, Y, Legend(5), Summary Statistic("Mean"))
),
SendToReport(
Dispatch({}, "400", ScaleBox,
{Legend Model(
5,
Type Properties(0, "Marker", {Transparency(0)}),
Properties(0, Item ID("Mean", 1))
)}
)
)
);
fb = Report(gb)[FrameBox(1)];
seg = (fb << FindSeg(Marker Seg(1)));
seg << Set Marker Draw Expr(
Function({this seg, this row, x, y, size, row state},
Pen Size(10); // Width of the line
Pen Color("Black");
Rect(x - 0.27, y, x + 0.27, -1, 0);
)
);

Re: 棒グラフに境界線(アウトライン)を追加/カスタマイズする方法@jthi ,
JMP 19のインストールでは、マーカー描画の式の例が正しく動作しません。マーカーの透明度のデフォルトが0に設定されているようです。以下の簡単な変更で、四角形が正しく表示されるようになります。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(656, 549),
Show Control Panel(0),
Variables(X(:age), Y(:height)),
Elements(
Bar(X, Y, Legend(4)),
Points(X, Y, Legend(5), Summary Statistic("Mean"))
),
SendToReport(
Dispatch({}, "400", ScaleBox,
{Legend Model(
5,
Type Properties(0, "Marker", {Transparency(0)}),
Properties(0, Item ID("Mean", 1))
)}
)
)
);
fb = Report(gb)[FrameBox(1)];
seg = (fb << FindSeg(Marker Seg(1)));
seg << Set Marker Draw Expr(
Function({this seg, this row, x, y, size, row state},
show(x,y);
Pen Size(10); // Width of the line
Pen Color("Black");
transparency(1); // Needed for JMP 19
Rect(x - 0.27, y, x + 0.27, -1, 0);
)
);
Re: 棒グラフに境界線(アウトライン)を追加/カスタマイズする方法細い線を境界線として使用してもよい場合は、非常に簡単です。パターンを「なし」にして 2 番目の棒グラフを追加し、色を黒などに調整するだけです。

Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Graph Builder(
Size( 469, 365 ),
Summary Statistic( "Median" ),
Variables( X( :age ), Y( :height ), Overlay( :sex ), Color( :sex ) ),
Elements(
Bar( X, Y, Bar Style( "Stacked" ) ),
Bar( X, Y, Legend( 2 ), Bar Style( "Stacked" ) )
),
SendToReport(
Dispatch( {}, "400", ScaleBox,
{Legend Model(
2,
Properties(
0,
{Fill Color( 0 ), Fill Pattern( "none" )},
Item ID( "F", 1 )
),
Properties(
1,
{Fill Color( 0 ), Fill Pattern( "none" )},
Item ID( "M", 1 )
)
)}
)
)
);
Re: 棒グラフに境界線(アウトライン)を追加/カスタマイズする方法@txnelson
詳しくご回答いただき、本当にありがとうございます。大変参考になりました。ただ、もう一つお願いしたいことがあります。
Set Marker Draw Expr を使用してバーの境界線を描画すると、最上位レイヤーに描画されます。
その結果、エラー バーまたは個々のデータ ポイント (ドット プロット経由) を追加すると、それらの上にカスタム境界線が描画されます。
境界線の描画順序 (レイヤー) を制御して、データ ポイントの背後に表示されるようにする方法はありますか?
高度にカスタマイズされたグラフ作成の場合、通常は R などのスクリプト言語を使用するのでしょうか、それとも GraphPad Prism などの専用ソフトウェアを使用するのでしょうか。
Re: 棒グラフに境界線(アウトライン)を追加/カスタマイズする方法個々の要素の順序を調整できます。
グラフを右クリックして順序を変更します。

プロット タイプが 1 つしかない場合は、20 個追加してカスタマイズします。
グラフビルダーは、一見しただけでは想像できないほど柔軟かつ強力です。その秘訣は次のとおりです。
非常に簡単なドラッグ アンド ドロップから高度にカスタマイズされたグラフへのスムーズな移行。
マーカー描画式の設定を使用すると、すでに 1 つの非常に複雑な機能を実現できますが、さらに多くの機能があります。
別のプロットツールを使用する必要はありません。
Re: 棒グラフに境界線(アウトライン)を追加/カスタマイズする方法新しい境界線とエラーバーを使ってグラフを描画します。グラフ上で右クリックし、「カスタム」を選択します。するとダイアログボックスが開き、エラーバーを選択して最前面に移動できます。ダイアログボックスを閉じ、赤い三角形をクリックして「スクリプトを保存」を選択します。生成されたスクリプトを確認すると、jslを使ってエラーバーを最前面に移動するために必要な手順が分かります。