막대형 차트에 테두리(윤곽선)를 추가/사용자 지정하는 방법안녕하세요 JMP 커뮤니티 여러분,
막대형 차트의 각 막대 주위에 윤곽선/테두리를 추가하고 너비를 사용자 지정하고 싶습니다. JMP에서 어떻게 할 수 있나요?
아래 이미지에서 볼 수 있듯이 각 막대 주위에 테두리나 윤곽선을 추가하고 싶습니다.

두 개의 막대 차트를 겹쳐서 윤곽선을 시뮬레이션하는 방법이 있다고 들었습니다. 하지만 이 방법은 윤곽선의 너비를 사용자 지정할 수 없는 것 같습니다.
그래프 빌더 인터페이스를 통하거나 스크립트를 편집하여 각 막대에 윤곽선을 적용하고 색상과 너비를 독립적으로 변경할 수 있는 방법이 있습니까?
저는 현재 JMP Student Edition 19를 사용하고 있습니다.
미리 도움을 주셔서 감사드립니다!
기본 데이터 분석 및 모델링데이터 탐색 및 시각화Re: 막대형 차트에 테두리(윤곽선)를 추가/사용자 지정하는 방법두 번째 막대 차트를 사용하는 것이 괜찮은 해결책이라고 생각하지만, 높이를 정확하게 맞추기 위해 열을 추가로 생성하고 너비 비율을 수정해야 하므로 약간의 작업이 필요합니다. 이 방법은 이미 구현되어 있습니다.

그래프가 어떻게 만들어졌는지(막대형 차트의 순서가 변경되고, 너비 비율이 수정되고, 색상이 변경되는 등) 살펴볼 수 있는 예제 스크립트가 있습니다.
더 보기...
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);
);
));

그리고 여기 마커 드로우 익스프가 있습니다.
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 설치 시 Marker Draw Expr 예제가 제대로 작동하지 않습니다. 마커의 투명도 기본값이 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: 막대형 차트에 테두리(윤곽선)를 추가/사용자 지정하는 방법테두리로 얇은 선이 괜찮다면 매우 간단합니다. 패턴이 "없음" 인 두 번째 막대 그래프를 추가하고 색상을 예를 들어 검은색으로 조정하기만 하면 됩니다.

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: 막대형 차트에 테두리(윤곽선)를 추가/사용자 지정하는 방법개별 요소의 순서를 조정할 수 있습니다.
그래프를 마우스 오른쪽 버튼으로 클릭하고 순서를 변경하세요.

플롯 유형이 하나뿐이라면 20개만 추가하고 사용자 정의하면 됩니다.
Graph Builder는 사람들이 처음 생각하는 것보다 훨씬 더 유연하고 강력합니다. 그 비결은 다음과 같습니다.
매우 간단한 드래그 앤 드롭 방식에서 고도로 사용자 정의된 그래프로 원활하게 전환됩니다.
Set Marker Draw Expr을 사용하면 매우 정교한 기능 하나만으로도 충분히 어려운 작업을 수행할 수 있지만, 그 외에도 훨씬 더 많은 기능이 있습니다.
다른 플로팅 도구를 사용할 필요가 없습니다.
Re: 막대형 차트에 테두리(윤곽선)를 추가/사용자 지정하는 방법새로운 테두리와 오차 막대를 사용하여 차트를 그리세요. 그런 다음 그래프를 마우스 오른쪽 버튼으로 클릭하고 사용자 지정을 선택하세요. 오차 막대를 선택하고 앞으로 이동할 수 있는 대화 상자가 나타납니다. 대화 상자를 닫고 빨간색 삼각형으로 이동하여 스크립트 저장을 선택하세요. 생성된 스크립트를 살펴보면 jsl을 사용하여 오차 막대를 앞으로 이동하는 데 필요한 사항을 확인할 수 있습니다.