If you need the x axes to be aligned then I assume they must represent
the same variable, in which case it should be enough to have one x
axis label for each column of panels. The trellis/lattice way is to
use strip labels to distinguish the panels in other ways.

Regards,
-Felix


On 7 May 2010 18:29, Marius Hofert <m_hof...@web.de> wrote:
> Dear Felix,
>
> the split and position argument can indeed be used (see below). But one has 
> to manually adjust the position argument for the last plot (bottom right) in 
> order to be aligned with the second (top right). This issue does not appear 
> in the "panel function" approach.
> As you can see from the code below, it is possible to put some text under the 
> x-axis of a panel, but the positioning depends on the scale of the y-axis... 
> hmm... no perfect solution.
>
> Cheers,
>
> Marius
>
> ## print idea
> myplot <- function(x,y,z,xlab,ylab){
>        xyplot(y~x|z,type="l",aspect=1,
>                xlab=xlab,ylab=ylab,
>                strip = function(...) strip.default(...),
>                scales=list(alternating=c(1,1),tck=c(1,0))
>                )
> }
> print(myplot(1:2,1:2,"variable 1","x label","y 
> label"),split=c(1,1,2,2),more=TRUE)
> print(myplot(1:2,2:1,"variable 2","x label","y 
> label"),split=c(1,2,2,2),more=TRUE)
> print(myplot(1:2,c(1,-1),"variable 3","x label","y 
> label"),split=c(2,1,2,2),more=TRUE)
> print(myplot(1:2,c(-2000,2000),"variable 4","x label","y 
> label"),split=c(2,2,2,2),more=FALSE)
>
> ## panel function
> library(lattice)
> x=c(1,2,1,2,1,2,1,2)
> y=c(1,2,2,1,1,-1,-2000,2000)
> z=c(1,1,2,2,3,3,4,4) # panel number
> xyplot(y~x|z,type="l",aspect=1,layout=c(2,2),
>       
> scales=list(y=list(rot=0),relation="free",alternating=c(1,1),tck=c(1,0)),
>       par.settings = list(clip=list(panel=FALSE),
>       layout.widths = list(axis.panel = 2,xlab=4,ylab=4),
>       layout.heights = list(axis.panel = 2)),
>       panel=function(...){
>               panel.xyplot(...,col=1)
>               panel.text(x=unit(1.5,"npc"),y=unit(-1.7,"npc"),"x axis")
>       }
> )
>
>
> On 2010-05-07, at 09:54 , Felix Andrews wrote:
>
>> If it is enough to have two y labels on the left side and two x label
>> along the bottom, you can specify xlab/ylab as vectors. Rather than
>> drawing different xlabs or ylabs for all panels in a grid, you would
>> typically use strips to label the panels.
>>
>> By the way, you could use the 'split' or 'position' arguments to
>> print.trellis to achieve the same result as your grid layout.
>>
>>
>> On 7 May 2010 01:52, Marius Hofert <m_hof...@web.de> wrote:
>>> Dear Deepayan,
>>>
>>> Thank you very much for your quick help.
>>>
>>> I played a bit around and came up with two methods of plotting
>>> a "matrix of plots" on a single page (see the code below). The first you 
>>> know
>>> from my earlier postings. For this method I have the following questions:
>>> 1) Is it possible to have different x- and y-labels for each of the panels
>>> (as in the second plot)?
>>> 2) Is it possible to rotate the y-axis ticks in each panel by -90 degrees
>>> (as in the second plot)?
>>> For the second method:
>>> 3) Is it possible reduce/control the space between the panels?
>>> 4) Is it possible to align the panels according to their "frame"? [the 
>>> panels of
>>> the variables 2 and 4 are not properly aligned as the labels for the latter 
>>> need
>>> more space than the ones of the former.]
>>>
>>> Many thanks,
>>>
>>> Marius
>>>
>>>
>>> library(lattice)
>>> library(grid)
>>>
>>> ## panel function
>>> library(lattice)
>>> x=c(1,2,1,2,1,2,1,2)
>>> y=c(1,2,2,1,1,-1,-2000,2000)
>>> z=c(1,1,2,2,3,3,4,4) # panel number
>>> xyplot(y~x|z,type="l",aspect=1,layout=c(2,2),
>>>       scales=list(relation="free",alternating=c(1,1),tck=c(1,0)),
>>>       par.settings = list(layout.widths = list(axis.panel = 2),
>>>       layout.heights = list(axis.panel = 2)),
>>>       panel=function(...){
>>>               panel.xyplot(...,col=1)
>>>       }
>>> )
>>>
>>> ## grid idea
>>> myplot <- function(x,y,z,xlab,ylab){
>>>        xyplot(y~x|z,type="l",aspect=1,
>>>                xlab=xlab,ylab=ylab,
>>>                strip = function(...) strip.default(...),
>>>                scales=list(alternating=c(1,1),tck=c(1,0))
>>>                )
>>> }
>>> grid.newpage()
>>> pushViewport(viewport(layout=grid.layout(2,2)))
>>> pushViewport(viewport(layout.pos.row=1,layout.pos.col=1))
>>>    print(myplot(1:2,1:2,"variable 1","x label","y label"),newpage=FALSE)
>>> popViewport(1)
>>> pushViewport(viewport(layout.pos.row=1,layout.pos.col=2))
>>>  print(myplot(1:2,2:1,"variable 2","x label","y label"),newpage=FALSE)
>>> popViewport(1)
>>> pushViewport(viewport(layout.pos.row=2,layout.pos.col=1))
>>>    print(myplot(1:2,c(1,-1),"variable 3","x label","y label"),newpage=FALSE)
>>> popViewport(1)
>>> pushViewport(viewport(layout.pos.row=2,layout.pos.col=2))
>>>  print(myplot(1:2,c(-2000,2000),"variable 4","x label","y 
>>> label"),newpage=FALSE)
>>> popViewport(1)
>>>
>>>
>>>
>>> On 2010-05-06, at 15:09 , Deepayan Sarkar wrote:
>>>
>>>> On Thu, May 6, 2010 at 6:24 PM, Marius Hofert <m_hof...@web.de> wrote:
>>>>> Thanks, Deepayan.
>>>>>
>>>>> Is it at least possible to increase the space between the panels in the 
>>>>> following plot?:
>>>>>
>>>>> library(lattice)
>>>>> x=rep(c(1,2,3),4) # x values
>>>>> y=1:12 # y values
>>>>> z=rep(1:4,each=3) # panel number
>>>>> xyplot(y~x|z,type="l",aspect=1,layout=c(2,2),
>>>>>       scales=list(relation="free",alternating=c(1,1),tck=c(1,0)),
>>>>>       panel=function(...){
>>>>>               panel.xyplot(...,col=1)
>>>>>
>>>>>       }
>>>>> )
>>>>
>>>> Sure, add
>>>>
>>>> par.settings = list(layout.widths = list(axis.panel = 2))
>>>>
>>>> (similarly layout.heights for vertical gap).
>>>>
>>>> -Deepayan
>>>>
>>>>>
>>>>> On 2010-05-06, at 13:53 , Deepayan Sarkar wrote:
>>>>>
>>>>>> On Thu, May 6, 2010 at 12:16 PM, Marius Hofert <m_hof...@web.de> wrote:
>>>>>>> Dear R experts,
>>>>>>>
>>>>>>> I have four plots I would like to plot attached to each other (in 
>>>>>>> panels).
>>>>>>> All plots have the same x-scale, but different y-scales. The example 
>>>>>>> below shows
>>>>>>> pretty much what I would like to have, except that for the two plots in 
>>>>>>> the
>>>>>>> "second column" (of this 2x2 plot-matrix), I would like to have the 
>>>>>>> y-ticks
>>>>>>> shown on the right side such that the four plot panels are attached to 
>>>>>>> each other/glued
>>>>>>> together. How can I achieve this?
>>>>>>
>>>>>> There is no easy way.
>>>>>>
>>>>>> For the first step of a difficult way, see ?axis.default
>>>>>>
>>>>>> -Deepayan
>>>>>>
>>>>>>
>>>>>>> I found a solution for a 2x1 matrix in the R-help archive, but this 
>>>>>>> problem here is different.
>>>>>>>
>>>>>>> Cheers,
>>>>>>>
>>>>>>> Marius
>>>>>>>
>>>>>>> Ps: I guess the "scales=..." should somehow go inside the panel 
>>>>>>> function, so that
>>>>>>> the panel number tells the "alternating"-argument where it has to print 
>>>>>>> the ticks.
>>>>>>>
>>>>>>> library(lattice)
>>>>>>> x=rep(c(1,2,3),4) # x values
>>>>>>> y=1:12 # y values
>>>>>>> z=rep(1:4,each=3) # panel number
>>>>>>> xyplot(y~x|z,type="l",aspect=1,layout=c(2,2),
>>>>>>>        
>>>>>>> scales=list(y=list(relation="free"),alternating=c(1,1),tck=c(1,0)),
>>>>>>>        panel=function(...){
>>>>>>>                panel.xyplot(...,col=1)
>>>>>>>
>>>>>>>        }
>>>>>>> )
>>>>>>> ______________________________________________
>>>>>>> R-help@r-project.org mailing list
>>>>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>>>>>> PLEASE do read the posting guide 
>>>>>>> http://www.R-project.org/posting-guide.html
>>>>>>> and provide commented, minimal, self-contained, reproducible code.
>>>>>>>
>>>>>
>>>>>
>>>
>>> ______________________________________________
>>> R-help@r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>
>>
>>
>> --
>> Felix Andrews / 安福立
>> Postdoctoral Fellow
>> Integrated Catchment Assessment and Management (iCAM) Centre
>> Fenner School of Environment and Society [Bldg 48a]
>> The Australian National University
>> Canberra ACT 0200 Australia
>> M: +61 410 400 963
>> T: + 61 2 6125 4670
>> E: felix.andr...@anu.edu.au
>> CRICOS Provider No. 00120C
>> --
>> http://www.neurofractal.org/felix/
>
>



-- 
Felix Andrews / 安福立
Postdoctoral Fellow
Integrated Catchment Assessment and Management (iCAM) Centre
Fenner School of Environment and Society [Bldg 48a]
The Australian National University
Canberra ACT 0200 Australia
M: +61 410 400 963
T: + 61 2 6125 4670
E: felix.andr...@anu.edu.au
CRICOS Provider No. 00120C
-- 
http://www.neurofractal.org/felix/

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to