Re: Aligning Graphs in GraphicsArray
- To: mathgroup at smc.vnet.net
- Subject: [mg3960] Re: [mg3882] Aligning Graphs in GraphicsArray
- From: Allan Hayes <hay at haystack.demon.co.uk>
- Date: Mon, 13 May 1996 01:45:51 -0400
- Sender: owner-wri-mathgroup at wolfram.com
Dirk Kautz <kautz at tyto.bio2.rwth-aachen.de> in [mg3882] Aligning Graphs in GraphicsArray asks, does anybody know how to align the y-axes of plots with ticks of different width in a GraphicsArray ? Example: in Show[GraphicsArray[{{Plot[x,{x,0,100}]},{Plot[100 x,{x,0,100}]}}]] the Y-Axes don't align, and ask for a way round this ******** Dirk, Below are two ways of dealing with your example - they may provide a basis for a more general solution. Allan Hayes hay at haystack.demon.co.uk **** Put g1 =Plot[x,{x,0,100}] g2 =Plot[100 x,{x,0,100}] We need to pad out the y-axis tick labels in g1 with spaces at the front so that they are as long as the longest y-axis label in g2, which is 10000. Find the primitives used for the ticks in g1 fg1 = FullGraphics[g1] Look inside -Graphics- by evaluating InputForm[fg1] By inspection identify the index of the y-ticks definition as 1,2,4 and pad the tick labels as required. pg1 = MapAt[ (#/.Text[n_?NumberQ, r__] :> Text[PaddedForm[n,5],r])&, fg1, {1,2,4} ]; It seems that we need to use PlotRange -> All to display the tick labels fully. sg1 = Show[pg1, PlotRange ->All]; Test in the array: Show[GraphicsArray[{{sg1},{g2}}]] Alternatively we can use FullOptions. The steps are similar. ytks = FullOptions[g1, Ticks][[2]]; Pad the labels (a little twist is that we have to use Round to get integer labels) pytks = Cases[fog1[[2]], {n_,p_?NumberQ, r___} :> {n,PaddedForm[Round[p],5]} ]; Show tha modified g1 sog1 = Show[g1, Ticks -> {Automatic, pytks}]; Check the array Show[GraphicsArray[{{sog1},{g2}}]]; ==== [MESSAGE SEPARATOR] ====