I assume you found the Text() function to draw the region labels but are just having trouble with the math for placing them. Below is some code that works reasonably well. It may need adjustment if the first or last labels get clipped by the xmin/ymin edges since this code doesn't test for those. I computed the text location as being on the middle angle of the region, but you might want to hard-code those instead. That is, have a list of text angles that goes along with the list of stop angles for each zone.
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] )
);
);
);