You can use CNTL2TXT
to calculate the position of labels on a graph. For example, the following
DATA step uses CNTL2TXT to position a pie slice label in the center
of the arc and just beyond the arc itself, as shown in
Labeled Pie Slice.
First, use the PIE function
to draw the pie slice:
data pielabel;
retain xsys ysys "3";
length function style $ 8;
function="pie"; size=20; x=30; y=30;
style="empty"; rotate=45; output;
Then use the PIEXY function
to calculate a point outside of the arc as shown in
Position Calculated with the PIEXY Function. /* find a point that is half of the arc (rotate*.5) */
/* and is 4 units beyond the radius (size=1.1) */
function="piexy"; angle=rotate*.5; size=1.1; output;
At this point, the XLAST
and YLAST variables contain the coordinates of the point that is calculated
by PIEXY. However, (XLAST, YLAST) cannot be used directly by text
functions. Use CNTL2TXT to copy the coordinates in (XLAST, YLAST)
to the XLSTT and YLSTT variables, which text functions can use.
Coordinates After Using the CNTL2TXT Function shows the results.
function="cntl2txt";
output;
Now you can use the
LABEL function to write the label as shown in
Labeled Pie Slice. Specify missing values for the X
and Y variables to force LABEL to use the XLSTT and YLSTT variables
instead of the X and Y variables.
/* write the label "Slice 1" and position it to */
/* the right of the point stored in XLSTT and YLSTT */
function="label"; text="Slice 1"; angle=0; rotate=0;
position="6"; style="swissb"; size=4; x=.; y=.;
output;
run;
/* draw the Annotate graphics */
proc ganno anno=pielabel;
run;
quit;