데이터 포인트 위 또는 아래에 레이블 위치를 균일하게 설정하는 방법
기본 데이터 분석 및 모델링Re: 데이터 포인트 위 또는 아래에 레이블 위치를 균일하게 설정하는 방법실험해 볼 더미 그래프:

Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Data Table( "Big Class" ) << Select All Rows << Label;
:weight << Label( 1 );
:name << Label( 0 );
Graph Builder(
Size( 437, 428 ),
Summary Statistic( "Median" ),
Graph Spacing( 4 ),
Variables( X( :name ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 4 ) ) ),
Local Data Filter(
Add Filter(
columns( :name ),
Where( :name == {"AMY", "BARBARA", "CAROL", "CHRIS", "CLAY", "DANNY"} ),
Display( :name, N Items( 15 ), Find( Set Text( "" ) ) )
)
)
);
Re: 데이터 포인트 위 또는 아래에 레이블 위치를 균일하게 설정하는 방법한 가지 접근 방식은 JSL을 통한 것입니다. 즉, 목록을 통해 모든 레이블에 대한 오프셋을 "수동으로" 추가하는 것입니다.

// create a list of identical offsets
labels = As list(Index(0,10))[1]; // surprise: the fist index is 0!
offset Expr = Expr(Label Offset());
offsets= For Each ({label}, labels, Insert Into(offset Expr,Eval List({label,0.,-20}))); // vertical offset: -20
// send the command to the Point plot
mySeg = current report()[FrameBox(1)] << find seg(MarkerSeg);
Eval (Eval Expr(mySeg << Expr(Name expr(offset Expr) )))
Re: 데이터 포인트 위 또는 아래에 레이블 위치를 균일하게 설정하는 방법스크립팅 없이 라벨 오프셋을 쉽게 조정할 수 있는지 잘 모르겠습니다.
아래는 JSL을 사용하여 이를 수행하는 방법에 대한 매우 빠른 예입니다.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(525, 512),
Show Control Panel(0),
Variables(X(:age), Y(:height)),
Elements(
Points(X, Y, Legend(3), Summary Statistic("Mean"), Label("Label by Value"))
)
);
frame = Report(gb)[FrameBox(1)];
seg = (frame << FindSeg(Marker Seg(1)));
For(i = 0, i <= N Items(seg << get markers), i++,
Eval(EvalExpr(
seg << Label Offset(Expr(Eval List({i, -5, -5})));
));
);
Re: 데이터 포인트 위 또는 아래에 레이블 위치를 균일하게 설정하는 방법해결되었습니다. 감사합니다!

dt3 = Data Table("光伏供应链价格汇总");
obj1 = dt3 << Graph Builder(
Size(1476, 745),
Show Control Panel(0),
Legend Position("Inside Right"),
Fit to Window("Off"),
Variables(X(:日期), Y(:单价), Group X(:产品), Group Y(:型号)),
Elements(
Points(X, Y, Legend(5), Label("Label by Value"), Label Format("Fixed Dec", 7, 2)),
Smoother(X, Y, Legend(6))
),
SendToReport(
Dispatch({}, "日期", ScaleBox,
{Min(min_date - 86400), Max(max_date + 86400), Interval("Day"), Inc(1),
Minor Ticks(0), Label Row(
{Label Orientation("Vertical"), Show Major Grid(0), Show Minor Grid(0)}
)}
),
Dispatch({}, "单价", ScaleBox,
{Min(0.2), Max(2.5), Inc(0.5), Minor Ticks(1),
Label Row({Show Major Grid(0), Show Minor Grid(0)})}
)
)
);
Wait(1);
excluded_rows = dt3 << Get Excluded Rows; //获取排除行矩阵
mm = N Row(excluded_rows); //获取排除行数
nn = (N Row(dt3) - mm) / 7;
report = obj1 << Report;
indices = {4, 5, 8, 9, 10, 20, 21};
For(idx = 1, idx <= N Items(indices), idx++,
i = indices[idx];
frame = report[FrameBox(i)];
For(j = 0, j <= nn, j++,
seg = frame << Find Seg(Marker Seg(1));
seg << Label Offset({j, -10, -10});
);
); Edit (jthi): Added JSL formatting
Re: 데이터 포인트 위 또는 아래에 레이블 위치를 균일하게 설정하는 방법대안으로, 보다 자동화된 접근 방식을 사용할 수 있습니다(예: 프레임 상자 인덱스를 수동으로 입력하고 싶지 않거나 Overlay를 사용하고 세그먼트가 더 많은 경우):
- 모든 lframeboxes 찾기
- 각 프레임박스에 대해 모든 세그먼트를 찾으세요
- 각 세그먼트에 대해 모든 마커를 찾으세요
- 오프셋을 적용하다
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Data Table( "Big Class" ) << Select All Rows << Label;
:weight << Label( 1 );
:name << Label( 0 );
gb = dt << Graph Builder(
Size( 437, 413 ),
Summary Statistic( "Median" ),
Graph Spacing( 4 ),
Variables( X( :height ), Y( :weight ), Wrap( :age ), Overlay( :sex ) ),
Elements( Points( X, Y ), Smoother( X, Y, Legend( 2 ) ) )
);
fbs = Current Report() << xpath( "//FrameBox" );
For Each( {frame}, fbs,
segs = (frame << FindSegs);
For Each( {seg}, segs,
Try( // skip non-Marker-segs
markers = seg << get markers;
For Each( {x, i}, markers,
seg << Label Offset( {i-1, -10, -10} )
);
);
);
);
Re: 데이터 포인트 위 또는 아래에 레이블 위치를 균일하게 설정하는 방법나 자신에게 메모:
멋지네요. 정확한 "i-1"을 얻으려면 표현 처리가 필요 없습니다.
seg << Label Offset( {i-1, -10, -10} )
seg는 메시지를 수신합니다. "i"를 보고 조회합니다. Eval(i) - 새 열(열 이름) 의 열 이름과 유사합니다.
반면에 표현 처리가 필요합니다.
Eval (Eval Expr(mySeg << Expr(Name expr(offset Expr) )))
와 함께
mySeg << offset Expr
다음과 같은 오류 메시지가 나타납니다.

Seg는 수락된 메시지 목록만 확인하고 오프셋 Expr은 나열되지 않습니다.
이름 Expr(오프셋 Expr) 이 체크되지 않았습니다.
- 그리고 Eval(오프셋 표현식) (메시지 내부의 for i 와 유사)은 의미가 없습니다.