你好,
我正在嘗試為圖形創建背景區域,其中區域代表特定斜率的區域,如下所示:

其中彩色區域基於 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] )
);
);
);