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

Hi Folks-

I'm trying to rotate my datalabels 90 degrees on a scatter plot which seems like an easy issue but I can't figure it out.  I tried adding a rotate=90 to DATALABELATTRS= but it didn't work.  Here's my code and graph.  I'm trying to get all those date labels on the plot to appear vertically like the labels for the reference lines do.  Can I do it?  I'm running  9.2 (TS2M2) on UNIX.

for_sas.png

proc template;

define statgraph sgplot;

begingraph;

EntryTitle "Subject 2007 - TEST CASE - Version 2" /;

layout overlay / xaxisopts=( display=none Label=" " type=linear linearopts=( viewmin=-20 viewmax=600 ) ) yaxisopts=( display=(tickvalues line ) Label="Modality" type=linear linearopts=( viewmin=0.5 viewmax=6.5 Integer=true) tickvalueattrs=(size=7) );

  ScatterPlot X=x Y=y / primary=true Group=modality DataLabel=asmtdt datalabelattrs=(size=7) LegendLabel=" " NAME="SCATTER";

  ;

  ReferenceLine x=1 / clip=true CURVELABEL="BL (07JAN10)" CurveLabelLocation=Outside CurveLabelPosition=Min curvelabelattrs=(size=7);

  ReferenceLine x=30 / clip=true CURVELABEL="C2D1(05FEB10)" CurveLabelLocation=Outside CurveLabelPosition=Min curvelabelattrs=(size=7);

  ReferenceLine x=62 / clip=true CURVELABEL="C3D1(09MAR10)" CurveLabelLocation=Outside CurveLabelPosition=Min curvelabelattrs=(size=7);

  ReferenceLine x=90 / clip=true CURVELABEL="C4D1(06APR10)" CurveLabelLocation=Outside CurveLabelPosition=Min curvelabelattrs=(size=7);

  ReferenceLine x=120 / clip=true CURVELABEL="C5D1(06MAY10)" CurveLabelLocation=Outside CurveLabelPosition=Min curvelabelattrs=(size=7);

  ReferenceLine x=147 / clip=true CURVELABEL="C6D1(02JUN10)" CurveLabelLocation=Outside CurveLabelPosition=Min curvelabelattrs=(size=7);

  ReferenceLine x=175 / clip=true CURVELABEL="C7D1(30JUN10)" CurveLabelLocation=Outside CurveLabelPosition=Min curvelabelattrs=(size=7);

  ReferenceLine x=203 / clip=true CURVELABEL="C8D1(28JUL10)" CurveLabelLocation=Outside CurveLabelPosition=Min curvelabelattrs=(size=7);

  ReferenceLine x=231 / clip=true CURVELABEL="C9D1(25AUG10)" CurveLabelLocation=Outside CurveLabelPosition=Min curvelabelattrs=(size=7);

  ReferenceLine x=259 / clip=true CURVELABEL="C10D1(22SEP10)" CurveLabelLocation=Outside CurveLabelPosition=Min curvelabelattrs=(size=7);

  ReferenceLine x=286 / clip=true CURVELABEL="C11D1(19OCT10)" CurveLabelLocation=Outside CurveLabelPosition=Min curvelabelattrs=(size=7);

  ReferenceLine x=313 / clip=true CURVELABEL="C12D1(15NOV10)" CurveLabelLocation=Outside CurveLabelPosition=Min curvelabelattrs=(size=7);

  ReferenceLine x=342 / clip=true CURVELABEL="C13D1(14DEC10)" CurveLabelLocation=Outside CurveLabelPosition=Min curvelabelattrs=(size=7);

  ReferenceLine x=377 / clip=true CURVELABEL="C14D1(18JAN11)" CurveLabelLocation=Outside CurveLabelPosition=Min curvelabelattrs=(size=7);

  ReferenceLine x=405 / clip=true CURVELABEL="C15D1(15FEB11)" CurveLabelLocation=Outside CurveLabelPosition=Min curvelabelattrs=(size=7);

  ReferenceLine x=433 / clip=true CURVELABEL="C16D1(15MAR11)" CurveLabelLocation=Outside CurveLabelPosition=Min curvelabelattrs=(size=7);

  ReferenceLine x=460 / clip=true CURVELABEL="C17D1(11APR11)" CurveLabelLocation=Outside CurveLabelPosition=Min curvelabelattrs=(size=7);

  ReferenceLine x=489 / clip=true CURVELABEL="C18D1(10MAY11)" CurveLabelLocation=Outside CurveLabelPosition=Min curvelabelattrs=(size=7);

  ReferenceLine x=516 / clip=true CURVELABEL="C19D1(06JUN11)" CurveLabelLocation=Outside CurveLabelPosition=Min curvelabelattrs=(size=7);

  ReferenceLine x=579 / clip=true CURVELABEL="EOT(08AUG11)" CurveLabelLocation=Outside CurveLabelPosition=Min curvelabelattrs=(size=7);

  DiscreteLegend "SCATTER"/ title="Modality";

endlayout;

EntryFootnote halign=left "CA=Clinical Assessment, US=Ultrasound, BP=Biopsy" /;

EntryFootnote halign=left "Baseline date is the first dose date (first dosing date with dose information available)." /;

EntryFootnote halign=left "Cycle X day 1 (EOT) date is the corresponding date from vital sign page." /;

endgraph;

end;

run;

1 ACCEPTED SOLUTION

Accepted Solutions
Jay54
Meteorite | Level 14

I cannot think of any way to have 90 degree rotated datalabels or tickvalues with SAS 9.2 SG Procedures or GTL.  You can get 45 degree rotated tick values automatically.  With SAS 9.3 SG annotate (or GTL Draw statements), you could create your own rotated tick labels or data values.  We are working on data label and tick value policies for V9.4, and would like to understand why this is important.

View solution in original post

13 REPLIES 13
Reeza
Super User

What about playing around with the TICKVALUEFITPOLICY options/settings?

It might be difficult to get them all on the plot though.

The default appears to be rotate which is what is occurring in your graph. Not sure what would happen if you set it to NONE though.

stacey11
Calcite | Level 5

I actually want the tickvalues to remain rotated.  It's the data labels inside the plot area that I want to change from horizontal orientation to vertical orientation (90 degree rotate) to match the orientation of the tickvalues on the x-axis.

Jay54
Meteorite | Level 14

I cannot think of any way to have 90 degree rotated datalabels or tickvalues with SAS 9.2 SG Procedures or GTL.  You can get 45 degree rotated tick values automatically.  With SAS 9.3 SG annotate (or GTL Draw statements), you could create your own rotated tick labels or data values.  We are working on data label and tick value policies for V9.4, and would like to understand why this is important.

stacey11
Calcite | Level 5

Thanks for the response.  As you can see from the plot we have a lot of data squeezed on there and the labels for the scatters are pretty squished.  My statistician thought it would look better if the datalabels for each date on the scatterplot was rotated to match the ticklabels on the x-axis as there seemed to him to be more vertical space than horizontal space.  I guess if we can't do it I'll just tell him that.

As for why it's important....I guess it's better to be more flexible whenever possible?  I don't know...maybe no one else would need this but it seems weird to be able to rotate text in some places in SAS and not others.  It's probably not a huge deal though.

Thanks again for the response, Stacey

Jay54
Meteorite | Level 14

One way we provide for such one-off requests is by supporting annotate in SG and draw statements in GTL.  Using these features at SAS 9.3 you can likely do whatever you want.  Is the data set sharable?  If yes, can you attaach it so I can play with the possibilities?

Jay54
Meteorite | Level 14

Would it work if you swapped your X & Y variables?

stacey11
Calcite | Level 5

No, it won't matter because I still need the dates (labels) within the plot area to be rotated and if you say they can't rotate in 9.2 then swapping axes won't solve my problem as the datalabels will still be on the plot and not rotated.  I can see where annotate would work but we're probably not getting 9.3 any time soon unfortunately.

I can't send my actual data but here's an idea of what it looks like (much more simplified).

datalines;

subject      X     Y     ASMDT

1               1     2     03DEC10

1               12   2     07JAN11

1               27   2     14FEB11

1               50   2     31MAR11

So it's just X plotted against Y with ASMDT as the data label for the point on the graph. 

Jay54
Meteorite | Level 14


I typed in a few values...Swapping X & Y will give you this:

SubjectStudy.png

data SubjectStudy;
  input name $1-20 state $ date;
  informat date date7.;
  format date date7.;
  Id=_n_;
  datalines;
BL (01Jan10)         CA   07Jan10
BL (01Jan10)         CT   07Jan10
BL (01Jan10)         Oth  07Jan10
C2D1(05Feb10)        CA   12Feb10
C3D1(09Mar10)        CA   16Mar10
C4D1(06Apr10)        CA   13Apr10
C5D1(06May10)        CA   13May10
C5D1(02May10)        BP   13May10
C6D1(02Jun10)        US   23Jun10
;
run;

proc sort data=SubjectStudy out=study;
  by descending id;

run;

%let gpath='C:\';
%let dpi=100;
ods listing gpath=&gpath image_dpi=&dpi;
ods graphics / reset width=5in height=1.5in imagename='SubjectStudy';
title 'Subject 2007 - TEST CASE - Version 1';
proc sgplot data=study;
  scatter y=name x=state / datalabel=date;
  xaxis display=(nolabel);
  yaxis display=(nolabel) grid;
  run;

Jay54
Meteorite | Level 14

Or, use rotated output image: Smiley Wink

SubjectStudyRotate2.png

stacey11
Calcite | Level 5

Hmm...rotating the image actually looks like my best bet....thanks for the idea!  I'll have to play around with it a bit to see if I can get my titles/footnotes/legends, etc. in the right place but I'll give it a shot.  The first one won't work as it doesn't solve my rotation problem and they very specifically want their X & Y axes as originally specified.

What do I need to specify to get the image rotated like that?

Jay54
Meteorite | Level 14

If you say so.   I just manually rotated the image, but you can find a sas image procedure feature to do it programmatically.   I personally think the unrotated graph is providing you exactly the same information in a much more readable fashion.  Reading text vertically is not very easy.  Also, getting the titles, footnotes, etc. to look right will be a challange.  I suggest it may be worth checking with your statistician.

stacey11
Calcite | Level 5

Thanks Sanjay.  I think I will check with the statistician just in case because swapping the axes would be the simplest solution here.  Thank again for all the help.  🙂

GraphGuy
Meteorite | Level 14

Sounds like there are a few issues with getting exactly what you're wanting in your version of GTL.

Here's an alternative way to do it, using good old Gplot 🙂

data SubjectStudy;
  input name $1-20 state $ date;
  informat date date7.;
  format date date7.;
  Id=_n_;
  datalines;
BL (01Jan10)         CA   07Jan10
BL (01Jan10)         CT   07Jan10
BL (01Jan10)         Oth  07Jan10
C2D1(05Feb10)        CA   12Feb10
C3D1(09Mar10)        CA   16Mar10
C4D1(06Apr10)        CA   13Apr10
C5D1(06May10)        CA   13May10
C5D1(02May10)        BP   13May10
C6D1(02Jun10)        US   23Jun10
;
run;

axis1 label=none value=(angle=90) offset=(5,5);

symbol pointlabel=("#date" angle=90);

title1 "Subject 2007 - TEST CASE - Version 1";
proc gplot data=SubjectStudy;
plot state*name / haxis=axis1;
run;

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 13 replies
  • 5331 views
  • 0 likes
  • 4 in conversation