Help using Base SAS procedures

Plotting two curves in a single Graph Using Proc GPLOT option Overlay

Accepted Solution Solved
Reply
Contributor
Posts: 35
Accepted Solution

Plotting two curves in a single Graph Using Proc GPLOT option Overlay

Hi,

I am trying to plot two different curves in a single graph using GPLOT procedure option overlay. It is working fine but when I try to plot one as scattered plot point and another as connected line curve I am hitting a stone wall. Below is the code I am using for this purpose:

filename grafout "D:\CURVE_CHARTS\chart_new.gif";

   goptions
    device=gif gsfname=grafout gsfmode=replace
    reset=global gunit=pct border
           cback=white
           colors=( blue black)
           ftitle=swissb ftext=swiss htitle=3
           htext=2;


     axis1 order=(100 to 1000 by 100)
        offset=(3,3)
        color=black
        major=(height=1 width=1)
        minor=none
        width=1;

     axis2 label=(angle=270 rotate=90 height=2 'Coverage')
        order=(20 to 100 by 10)
        offset=(3,3)
        color=black
        major=(height=1 width=1)
        minor=none
        width=1;

   symbol1 height=0.3 value=dot;
   symbol2 value=dot interpol=join line=1 height=1.3;

   proc gplot data=plot_final;
    title 'CURVE CHART';
    plot
    Coverage_Plus1*Single_Coefficient  p_1*Single_Coefficient
   
    /overlay haxis=axis1 vaxis=axis2 caxis=black cframe=white legend;
    run;
    quit;
  run;
  quit;

As you can see I am using Overlay option to plot both Coverage_Plus1*Single_Coefficient and p_1*Single_Coefficient plots in a single graph. In the above code I have mentioned Symbol1 as value=dot whereas Symbol2 as Interpol=Join with the intention of plotting Graph 1 as scattered plot and Graph 2 as connected by line. But once I run this code I am getting both as scattered point graphs.

Can anybody help me with this? Thanks in advance for your help.

Thanks & Regards,

Saugata Mukherjee.


Accepted Solutions
Solution
‎12-20-2011 11:45 AM
Valued Guide
Posts: 765

Re: Plotting two curves in a single Graph Using Proc GPLOT option Overlay

hi ... one of the attributes of a a SYMBOL is COLOR and if you do not specify a color for a symbol, SAS/GRAPH cycles though the color list for a given symbol before using the next symbol

so ... I added a color to your symbol statements

and ... I added a data step to make some fake data in the range of your axis statements and produced the attached plot

and ... I made a few changes to some of your SAS code

#1 not sure why you are using a SAS stroke font (swiss) when TrueType fonts (Calibri, whatever) might be available and look better

#2 raised the pixel count ... looks better in bit-map output (GIF)

#3  used a TrueType font (Wingdings) as the symbol value ... if you have access to TrueType fonts try ...

goptions reset-all;

proc gfont name="wingdings" nibuild showroman;

run;

quit;

character '6c'x is a DOT

#4 added a LEGEND definition to get rid of the default label (PLOT1)

#5  added some "white space" around the chart with the LS option for title/footnote

here's the code and the result is attached ...

data plot_final;

do _n_ = 1 to 50;

  Single_Coefficient = 100 + ceil(900*ranuni(1234));

  Coverage_Plus1 = 20 + ceil(80*ranuni(1234));

  p_1 = 20 + ceil(80*ranuni(1234));

output;

end;

run;

proc sort data=plot_final;

by Single_Coefficient;

run;

filename grafout "z:\chart_new.gif";

goptions reset=global

device=gif gsfname=grafout gsfmode=replace xpixels=1500 ypixels=1000

gunit=pct border

cback=white colors=( blue black)ftitle="calibri/bo" ftext="calibri" htitle=3 htext=2;

axis1 order=(100 to 1000 by 100)

      offset=(3,3)

      color=black

      major=(height=1 width=1)

      minor=none

      width=1;

axis2 label=(angle=270 rotate=90 height=2 'Coverage')

      order=(20 to 100 by 10)

      offset=(3,3)

      color=black

      major=(height=1 width=1)

      minor=none

      width=1;

legend1 label=none;

symbol1 height=0.5 f="wingdings" value='6c'x c=blue;

symbol2 f="wingdings" value='6c'x interpol=join line=1 height=1.3 c=blue;

title1 'CURVE CHART' ls=2;

title2 a=90 ls=1;

title3 a=-90 ls=1;

footnote1 ls=0.5;

proc gplot data=plot_final;

plot Coverage_Plus1*Single_Coefficient  p_1*Single_Coefficient   

/overlay haxis=axis1 vaxis=axis2 caxis=black cframe=white legend=legend1;

run;

quit;


chart_new.gif

View solution in original post


All Replies
Super User
Posts: 10,497

Plotting two curves in a single Graph Using Proc GPLOT option Overlay

change your plot statement to

Coverage_Plus1*Single_Coefficient=1  p_1*Single_Coefficient=2 to force use of different symbol statements.

Solution
‎12-20-2011 11:45 AM
Valued Guide
Posts: 765

Re: Plotting two curves in a single Graph Using Proc GPLOT option Overlay

hi ... one of the attributes of a a SYMBOL is COLOR and if you do not specify a color for a symbol, SAS/GRAPH cycles though the color list for a given symbol before using the next symbol

so ... I added a color to your symbol statements

and ... I added a data step to make some fake data in the range of your axis statements and produced the attached plot

and ... I made a few changes to some of your SAS code

#1 not sure why you are using a SAS stroke font (swiss) when TrueType fonts (Calibri, whatever) might be available and look better

#2 raised the pixel count ... looks better in bit-map output (GIF)

#3  used a TrueType font (Wingdings) as the symbol value ... if you have access to TrueType fonts try ...

goptions reset-all;

proc gfont name="wingdings" nibuild showroman;

run;

quit;

character '6c'x is a DOT

#4 added a LEGEND definition to get rid of the default label (PLOT1)

#5  added some "white space" around the chart with the LS option for title/footnote

here's the code and the result is attached ...

data plot_final;

do _n_ = 1 to 50;

  Single_Coefficient = 100 + ceil(900*ranuni(1234));

  Coverage_Plus1 = 20 + ceil(80*ranuni(1234));

  p_1 = 20 + ceil(80*ranuni(1234));

output;

end;

run;

proc sort data=plot_final;

by Single_Coefficient;

run;

filename grafout "z:\chart_new.gif";

goptions reset=global

device=gif gsfname=grafout gsfmode=replace xpixels=1500 ypixels=1000

gunit=pct border

cback=white colors=( blue black)ftitle="calibri/bo" ftext="calibri" htitle=3 htext=2;

axis1 order=(100 to 1000 by 100)

      offset=(3,3)

      color=black

      major=(height=1 width=1)

      minor=none

      width=1;

axis2 label=(angle=270 rotate=90 height=2 'Coverage')

      order=(20 to 100 by 10)

      offset=(3,3)

      color=black

      major=(height=1 width=1)

      minor=none

      width=1;

legend1 label=none;

symbol1 height=0.5 f="wingdings" value='6c'x c=blue;

symbol2 f="wingdings" value='6c'x interpol=join line=1 height=1.3 c=blue;

title1 'CURVE CHART' ls=2;

title2 a=90 ls=1;

title3 a=-90 ls=1;

footnote1 ls=0.5;

proc gplot data=plot_final;

plot Coverage_Plus1*Single_Coefficient  p_1*Single_Coefficient   

/overlay haxis=axis1 vaxis=axis2 caxis=black cframe=white legend=legend1;

run;

quit;


chart_new.gif
Contributor
Posts: 35

Re: Plotting two curves in a single Graph Using Proc GPLOT option Overlay

Thanks a lot MikeZdeb. You have just saved my life. Smiley Happy

☑ This topic is SOLVED.

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

Discussion stats
  • 3 replies
  • 163 views
  • 0 likes
  • 3 in conversation