Data visualization with SAS programming

proc boxplot legend

Accepted Solution Solved
Reply
Contributor
Posts: 43
Accepted Solution

proc boxplot legend

Hi,

I am creating a boxplot comparing 2 Trt arms, side by side, on different visits.

I am differentiating two arms by different colors. Now I want to create a legend to specify which color is for which arm. How can I do that?

I am not using overlay statement in proc boxplot.

I have four visits for TRT 1 . And same four visits for TRT 2. Visits are on xaxis I am creating 8 different values for visits in two TRT arms, 4 for each.

And then plotting these 8 values on xaxis , and then differing the TRT arms using cboxfill.

I have attached the graph for your reference.

Any help would be really appreciated.

Thanks


Accepted Solutions
Solution
‎01-22-2013 03:07 PM
Super Contributor
Posts: 543

Re: proc boxplot legend

Posted in reply to maggi2410

Hi.

If you don't use SAS 9.2 or higher, most likely you'll have to use the annotate to add the legend.

Here is an example - using the sashelp.class;

*create the group color;

data temp;

    set sashelp.class;

if sex = "F" then color="green";

    if sex = "M" then color = "gray";

run;

goptions reset = all;

; Create the Annotate data set ;

data anno;

   length function color $ 8 text $ 25 style $ 25;

   xsys='3'; ysys='3';

      /* Draw the first square */

   color='green';

   function='move'; x=80; y=82; output;

   function='bar';  x=82; y=80; style='solid'; output;

      /* Label the first square */

   function='label'; x=83; y=81; position='6';

      style="'Albany AMT/bold'"; size=1; text='Female'; output;

      /* Draw the second square */

   color='gray'; style='solid';

   function='move'; x=80; y=78; output;

   function='bar';  x=82; y=76; style='solid'; output;

      /* Label the first square */

   function='label'; x=83; y=77; position='6';

      style="'Albany AMT/bold'"; ; size=1; text='Male'; output;

run;

proc sort data = temp;by sex;run;

proc format;

    value  $ gender "M" = "Male" "F" = "Female";quit;

goptions reset = all;

proc boxplot data = temp anno = anno;

    plot age*sex/boxstyle = schematic cboxfill = (color);

    format sex $gender.;

run;quit;

Best of luck!

Anca.


boxplot9.png

View solution in original post


All Replies
SAS Super FREQ
Posts: 1,265

Re: proc boxplot legend

Posted in reply to maggi2410

Can you attach the full program including data?  Which release of SAS are you using?

Solution
‎01-22-2013 03:07 PM
Super Contributor
Posts: 543

Re: proc boxplot legend

Posted in reply to maggi2410

Hi.

If you don't use SAS 9.2 or higher, most likely you'll have to use the annotate to add the legend.

Here is an example - using the sashelp.class;

*create the group color;

data temp;

    set sashelp.class;

if sex = "F" then color="green";

    if sex = "M" then color = "gray";

run;

goptions reset = all;

; Create the Annotate data set ;

data anno;

   length function color $ 8 text $ 25 style $ 25;

   xsys='3'; ysys='3';

      /* Draw the first square */

   color='green';

   function='move'; x=80; y=82; output;

   function='bar';  x=82; y=80; style='solid'; output;

      /* Label the first square */

   function='label'; x=83; y=81; position='6';

      style="'Albany AMT/bold'"; size=1; text='Female'; output;

      /* Draw the second square */

   color='gray'; style='solid';

   function='move'; x=80; y=78; output;

   function='bar';  x=82; y=76; style='solid'; output;

      /* Label the first square */

   function='label'; x=83; y=77; position='6';

      style="'Albany AMT/bold'"; ; size=1; text='Male'; output;

run;

proc sort data = temp;by sex;run;

proc format;

    value  $ gender "M" = "Male" "F" = "Female";quit;

goptions reset = all;

proc boxplot data = temp anno = anno;

    plot age*sex/boxstyle = schematic cboxfill = (color);

    format sex $gender.;

run;quit;

Best of luck!

Anca.


boxplot9.png
Contributor
Posts: 43

Re: proc boxplot legend

Posted in reply to AncaTilea

Thanks . Finally I am using annotation. I wish SAS would have some defined functionality to do this. BTW I am using SAS 9.2

SAS Super FREQ
Posts: 1,265

Re: proc boxplot legend

Posted in reply to maggi2410

With SAS 9.2M3, you can do this using GTL.

CarsBox.png

proc template;
  define statgraph cars;
    begingraph;
      entrytitle 'Mileage by Origin';
      layout overlay / xaxisopts=(display=(ticks tickvalues))

                               yaxisopts=(griddisplay=on) cycleattrs=true;
         boxplot x=origin y=mpg_city / discreteoffset=-0.15    boxwidth=0.25

                   name='c' legendlabel='City';
         boxplot x=origin y=mpg_highway / discreteoffset= 0.15 boxwidth=0.25

                   name='h' legendlabel='Highway';
          discretelegend 'c' 'h';
       endlayout;
     endgraph;
  end;
run;


proc sgrender data=sashelp.cars(where=(type ne 'Hybrid')) template=cars;
run;

Contributor
Posts: 43

Re: proc boxplot legend

Posted in reply to Sanjay_SAS

Thanks Sanjay. Actually I was creating multiple graphs n same page. So I am not sure if I could have used it. For now, I have used annotation. Will explore this too for sure.

Thanks!

🔒 This topic is solved and locked.

Need further help from the community? Please ask a new question.

Discussion stats
  • 5 replies
  • 3340 views
  • 1 like
  • 3 in conversation