BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
andrealivraghi
Calcite | Level 5

 

%macro scatter (x,y, xlabel, ylabel, pearson, pval);

ods html gpath = '...';
ods graphics / reset = all width = 12in height = 6in border = off
imagename = "Scatter_&x-&y" imagefmt = png ;

proc sgscatter data = data_2015;
plot &x*&y /  filledoutlinedmarkers group = type 

markerfillattrs = (color = CX62C0FF) 
markeroutlineattrs = (color = CX265C7F  thickness = 1)
markerattrs = (symbol = circlefilled size = 15 )

/* Here i want to include two more colors */ ; title "Pearson = &pearson P-Value = &pval"; label &x = "&xlabel" &y = "&ylabel"; run;

Hi everyone, 

 

I am trying to specify 3 different markers colors in a gscatter procedure according to a categorical variable "type" (assuming 3 values) specified in the group option. How can I use the filledoutlinedmarkers option for grouped variables in the same scatterplot?

 

Thanks in advance

1 ACCEPTED SOLUTION

Accepted Solutions
DanH_sas
SAS Super FREQ

There are two way to do this. One way is to just override the style colors using the DATACOLORS and DATACONTRASTCOLORS option:

 

proc sgscatter data=sashelp.class datacolors=(lightblue pink) datacontrastcolors=(blue maroon);
plot weight*height / group=sex filledoutlinedmarkers
markerattrs=(symbol=circlefilled size=10);
run;

You can also use a discrete attributes map to associate the colors to the correct group values so that you are not dependent on data order:

 

data markermap;
retain id "myid";
length fillcolor $ 9 markercolor $ 6;
input value $ fillcolor $ markercolor $;
cards;
F pink      maroon
M lightblue blue
;
run;

proc sgscatter data=sashelp.class dattrmap=markermap;
plot weight*height / group=sex attrid=myid filledoutlinedmarkers
markerattrs=(symbol=circlefilled);
run;

Hope this helps!

Dan

View solution in original post

2 REPLIES 2
DanH_sas
SAS Super FREQ

There are two way to do this. One way is to just override the style colors using the DATACOLORS and DATACONTRASTCOLORS option:

 

proc sgscatter data=sashelp.class datacolors=(lightblue pink) datacontrastcolors=(blue maroon);
plot weight*height / group=sex filledoutlinedmarkers
markerattrs=(symbol=circlefilled size=10);
run;

You can also use a discrete attributes map to associate the colors to the correct group values so that you are not dependent on data order:

 

data markermap;
retain id "myid";
length fillcolor $ 9 markercolor $ 6;
input value $ fillcolor $ markercolor $;
cards;
F pink      maroon
M lightblue blue
;
run;

proc sgscatter data=sashelp.class dattrmap=markermap;
plot weight*height / group=sex attrid=myid filledoutlinedmarkers
markerattrs=(symbol=circlefilled);
run;

Hope this helps!

Dan

andrealivraghi
Calcite | Level 5
Thank you! Both solutions work fine

sas-innovate-wordmark-2025-midnight.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.


Register now!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 2 replies
  • 2497 views
  • 0 likes
  • 2 in conversation