你好,
我正在尝试为图形创建背景区域,其中区域代表特定斜率的区域,如下所示:

其中彩色区域基于 X/Y 值(图中的 ffc),范围从 <1 到 >10。 因为 X 和 Y 的范围随观察结果而变化,所以我使用多边形函数映射了区域或轮廓,并将结果轴 min 和 max 作为输入,如下所示:
多边形({0, 0}, {XMin, YMax}, {XMax, YMax}, {XMax, XMax * 10} )
效果很好。 我的问题是指定标记每个区域的文本位置,我还没有找到一种方法使文本根据类似于多边形的数据动态移动,这样我就不必事后进入并指定确切的坐标. 如果有人可以提供有关在图表中实现某种动态文本的想法/建议,将不胜感激。 我确信有更好的方法来做到这一点,而不是使用多边形和文本函数,但我似乎无法弄清楚,或者是否有一个好的方法可以做到这一点。 我也意识到这纯粹是为了美学,但我花了太多时间试图找到一个解决方案,所以我决心找到一些可行的东西。
感谢任何提供回复的人。
我假设您找到了 Text() 函数来绘制区域标签,但只是在放置它们时遇到了数学问题。 下面是一些运行良好的代码。 如果第一个或最后一个标签被 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] )
);
);
);