안녕하십니까,
아래와 같이 영역이 특정 기울기의 영역을 나타내는 그래프의 배경 영역을 만들려고 합니다.

여기서 색상 영역은 값 X/Y(그래프의 ffc)를 기반으로 하며 범위는 <1에서 >10입니다. X와 Y의 범위는 관찰에 따라 다르기 때문에 폴리곤 함수를 사용하여 매핑된 영역 또는 등고선을 가지고 다음과 같이 입력으로 결과 축의 최소값과 최대값을 가져옵니다.
다각형( {0, 0}, {XMin, YMax}, {XMax, YMax}, {XMax, XMax * 10} )
충분히 잘 작동합니다. 내 문제는 각 영역에 레이블을 지정하는 텍스트 위치를 지정하는 것입니다. 사실 이후에 들어가서 정확한 좌표를 지정할 필요가 없도록 폴리곤과 유사한 데이터를 기반으로 텍스트가 동적으로 이동하는 방법을 아직 찾지 못했습니다. . 누군가가 그래프 내에서 일종의 동적 텍스트를 달성하는 데 대한 아이디어/권장 사항을 제공할 수 있다면 매우 감사할 것입니다. 폴리곤과 텍스트 기능을 사용하는 것보다 이것을 하는 더 좋은 방법이 있다고 확신합니다. 나는 이것이 순전히 미학을 위한 것이라는 것도 알고 있지만 해결책을 찾는 데 너무 많은 시간을 보냈기 때문에 효과가 있는 것을 찾기로 결심했습니다.
답변을 제공해주신 모든 분들께 감사드립니다.
영역 레이블을 그리는 Text() 함수를 찾았지만 레이블을 배치하는 데 문제가 있다고 가정합니다. 아래는 합리적으로 잘 작동하는 몇 가지 코드입니다. 이 코드는 xmin/ymin 가장자리를 테스트하지 않기 때문에 첫 번째 또는 마지막 레이블이 xmin/ymin 가장자리에 의해 잘리는 경우 조정이 필요할 수 있습니다. 텍스트 위치를 영역의 중간 각도로 계산했지만 대신 하드 코딩하고 싶을 수도 있습니다. 즉, 각 영역에 대한 정지 각도 목록과 함께 가는 텍스트 각도 목록이 있습니다.

xmin = 400;
xmax = 1800;
ymin = 0;
ymax = 3600;
New Window( "fills",
gb = Graph Box(
Frame Size( 500, 500 ),
X Scale( xmin, xmax ),
Y Scale( ymin, ymax ),
Marker(
Marker State( 8 ),
J( 20, 1, Random Normal( 1000, 50 ) ),
J( 20, 1, Random Normal( 1000, 300 ) )
)
)
);
framebox = gb[frame box( 1 )];
framebox << Add Graphics Script(
max diagonal = Max( xmax, ymax ) * Sqrt( 2 );
Fill Color( "red" );
stops = {0, 1, 2, 4, 10};
For( i = 2, i <= N Items( stops ), i++,
// fill wedge
Transparency( 0.07 * i );
a1 = ATan( stops[i] );
a0 = ATan( stops[i - 1] );
Polygon( {0, 0},
{Cos( a1 ) * max diagonal, Sin( a1 ) * max diagonal},
{Cos( a0 ) * max diagonal, Sin( a0 ) * max diagonal} );
// text label in center of wedge, constrained to graph bounds
text angle = Mean( a0, a1 );
xt = Cos( text angle ) * max diagonal;
yt = Sin( text angle ) * max diagonal;
scale to fit = Min( xmax / xt, ymax / yt ) * 0.9;
Transparency( 0.9 );
Text(
Center justified,
{xt * scale to fit, yt * scale to fit},
Char( stops[i - 1] ) || " < r < " || Char( stops[i] )
);
);
);