Data visualization with SAS programming

Left-right ordering of sidebar and rowheaders in GTL datalattice

Accepted Solution Solved
Reply
New Contributor mbg
New Contributor
Posts: 2
Accepted Solution

Left-right ordering of sidebar and rowheaders in GTL datalattice

I have a finicky problem with laying out labels in a GTL datalattice.

 

This almost does what I want, with one problem: the sidebar 'Cat 1 Description' (which describes the rowheaders) should be to the left of the rowheaders 'Type A' and 'Type B', and I can't figure out how to get it there.

 

proc template;
define statgraph test;
	begingraph;
		layout datalattice rowvar=cat1 /
			row2axisopts=(label='Cat 2 Description')
			headerlabeldisplay=value headerlabellocation=outside rowheaders=left;
			sidebar / align=left;
				entry 'Cat 1 Description' / rotate=90;
			endsidebar;
			layout prototype;
				barchart x=cat2 y=pct_row /
					orient=horizontal yaxis=y2;
			endlayout;
		endlayout;
	endgraph;
end;

graph.png

This is the vertical bar equivalent, which is laid out just how I like it:

 

proc template;
define statgraph test;
	begingraph;
		layout datalattice columnvar=cat1 /
			columnaxisopts=(label='Cat 2 Description')
			headerlabeldisplay=value headerlabellocation=inside columnheaders=top;
			    sidebar / align=top;
					entry 'Cat 1 Description';
				endsidebar;
				layout prototype;
					barchart x=cat2 y=pct_row /
						orient=vertical;
				endlayout;
		endlayout;
	endgraph;
end;

Things I've tried that didn't work: headerlabellocation=inside (changes the row headers to be horizontal text at the top of the cell, at least in SAS 9.3); adding a cell with the row label text within a gridded layout (too much whitespace).


Accepted Solutions
Solution
‎12-01-2015 08:20 PM
SAS Super FREQ
Posts: 1,136

Re: Left-right ordering of sidebar and rowheaders in GTL datalattice

Sometimes an inline annotation (DRAWTEXT) is what you need.

 

proc template;
  define statgraph test;
    begingraph;
      layout datalattice rowvar=cat1 / pad=(left=5pct)
                                 row2axisopts=(label='Cat 2 Description')
                                headerlabeldisplay=value headerlabellocation=outside rowheaders=left;
       drawtext "Cat 1 Description" / x=0 y=55 anchor=top rotate=90 width=50 drawspace=layoutpercent;

       layout prototype;
         barchart x=cat2 y=pct_row / orient=horizontal yaxis=y2;
      endlayout;
    endlayout;
  endgraph;
end;

 

data bar;
format pct_row percent.;
input cat1 $ cat2 $ pct_row;
datalines;
TypeA TypeA 0.55
TypeA TypeB 0.55
TypeB TypeA 0.55
TypeB TypeB 0.60
;
run;

proc sgrender data=bar template=test;
run;

 

DataLattice.png

View solution in original post


All Replies
Solution
‎12-01-2015 08:20 PM
SAS Super FREQ
Posts: 1,136

Re: Left-right ordering of sidebar and rowheaders in GTL datalattice

Sometimes an inline annotation (DRAWTEXT) is what you need.

 

proc template;
  define statgraph test;
    begingraph;
      layout datalattice rowvar=cat1 / pad=(left=5pct)
                                 row2axisopts=(label='Cat 2 Description')
                                headerlabeldisplay=value headerlabellocation=outside rowheaders=left;
       drawtext "Cat 1 Description" / x=0 y=55 anchor=top rotate=90 width=50 drawspace=layoutpercent;

       layout prototype;
         barchart x=cat2 y=pct_row / orient=horizontal yaxis=y2;
      endlayout;
    endlayout;
  endgraph;
end;

 

data bar;
format pct_row percent.;
input cat1 $ cat2 $ pct_row;
datalines;
TypeA TypeA 0.55
TypeA TypeB 0.55
TypeB TypeA 0.55
TypeB TypeB 0.60
;
run;

proc sgrender data=bar template=test;
run;

 

DataLattice.png

New Contributor mbg
New Contributor
Posts: 2

Re: Left-right ordering of sidebar and rowheaders in GTL datalattice

[ Edited ]

Thanks Sanjay, that does the trick.

 

DRAWTEXT was indeed the missing link. I was trying to do it using ENTRY and not getting anywhere.

🔒 This topic is solved and locked.

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

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