[R] two lattice graphs in one object
Andreas Krause
andreas at elmo.ch
Wed Sep 3 08:43:38 CEST 2008
Deepayan,
that is exactly what I was hoping for. Thanks much!
Experimenting with it I noticed that updating two existing objects with plot arguments seems to not work, at least not in this way:
gr1 <-xyplot(rnorm(111) ~ runif(111), main = "Plot A")
gr2 <- xyplot(runif(111) ~ runif(111), main = "Plot B")
plist <- list(
update(gr1, plot.args = list(position = c(0, 0, 1, 0.5), more = TRUE)),
update(gr2, plot.args = list(position = c(0, 0.5, 1, 1), more = FALSE))
)
print(plist)
gives me two separate pages, even though the object is updated:
> plist[[1]]$panel.args.common
$plot.args
$plot.args$position
[1] 0.0 0.0 1.0 0.5
$plot.args$more
[1] TRUE
I can get it to work the "dirty" way:
plist[[1]]$plot.args <- list(position = c(0, 0, 1, 0.5), more = TRUE)
plist[[2]]$plot.args <- list(position = c(0, 0.5, 1, 1), more = FALSE)
Shouldn't update work as well?
(R version 2.6.2, platform i386-pc-mingw32)
Thanks again!
Andreas
On Tue Sep 2 21:43 , "Deepayan Sarkar" sent:
>On Tue, Sep 2, 2008 at 6:24 AM, Andreas Krause andreas at elmo.ch> wrote:
>>
>> When I create a lattice/Trellis type graph, I typically write a function that returns the graph, as in
>> do.graph
>> {
>> 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
>> gr2
>> 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
More information about the R-help
mailing list