On Tue, Sep 2, 2008 at 6:24 AM, Andreas Krause <[EMAIL PROTECTED]> wrote:
>
> When I create a lattice/Trellis type graph, I typically write a function that 
> returns the graph, as in
> do.graph <- function(x, y, ...)
>  {
>    require(lattice)
>    return(xyplot(y~x, ...))
>  }
>
> My question today is this:
> If I want two graphs on one page, one way of achieving it is to print the 
> objects into defined areas, as in
>
> gr1 <- xyplot(rnorm(111) ~ runif(111))
> gr2 <- xyplot(runif(111) ~ runif(111))
> print(gr1, pos=c(0, 0, 1, 0.5), more=T)
> print(gr2, pos=c(0, 0.5, 1, 1), more=F)
>
> Instead of using the print method, can I create a single trellis object that 
> contains those two "sub-graphs"?
> I do not think so, given what I know about the design of these objects.
> I am hoping for a pleasant surprise though.

Well, you cannot return it as a single "trellis" object. However, you
could always return it as a list with multiple "trellis" objects, and
they will just get printed one by one. You can attach print()
arguments to the objects themselves, so that takes care of the layout.
For example, try

plist <- {
    gr1 <-
        xyplot(rnorm(111) ~ runif(111), main = "Plot A",
               plot.args = list(position = c(0, 0, 1, 0.5), more = TRUE))
    gr2 <-
        xyplot(runif(111) ~ runif(111), main = "Plot B",
               plot.args = list(position = c(0, 0.5, 1, 1), more = FALSE))
    list(gr1, gr2)
}

print(plist)


Actually you will see some output on the console:

> print(plist)
[[1]]

[[2]]

This is from the print method for lists. If you want to avoid that,
you can always set a class on the list you return and write a
corresponding print() method.

-Deepayan

______________________________________________
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