[R] [FORGED] lattice: control panel extent on device

Richard M. Heiberger rmh at temple.edu
Wed Oct 26 05:21:23 CEST 2016


I think this is simpler.

vol_p2 <- vol_p
vol_p2$legend <- NULL
print(update(vol_p2, scales=list(y=list(labels=FALSE))), split = c(1,
2, 1, 2), more = TRUE)
draw.colorkey(vol_p$legend$right$args$key, draw=TRUE,
vp=viewport(y=.27, height=.26, x=.75))
print(update(xy_p, scales=list(y=list(labels=FALSE))),  split = c(1,
1, 1, 2), more = FALSE)

On Tue, Oct 25, 2016 at 10:08 PM, Ben Tupper <btupper at bigelow.org> wrote:
> Wow!  That's exactly what I am looking for!
>
> I have had both books* open in front of me all day to no avail, and, I was spinning round and round - I was waaay off in left field.
>
> Thanks so much!
> Ben
>
>
> * https://www.r-project.org/doc/bib/R-books_bib.html#R:Sarkar:2008
>   https://www.r-project.org/doc/bib/R-books_bib.html#R:Murrell:2011
>
>> On Oct 25, 2016, at 8:07 PM, Paul Murrell <paul at stat.auckland.ac.nz> wrote:
>>
>> Hi
>>
>> This might work, though it's a teensy bit more complicated and a bit manual (on the left axis labels) and it ignores heights and vertical whitespace ...
>>
>> library(lattice)
>> d <- dim(volcano)
>> xy <- data.frame(x = 1:d[1], y = volcano[,30] )
>> library(grid)
>> grid.newpage()
>> pushViewport(viewport(y=0, height=.5, just="bottom"))
>> # Force identical widths where we can
>> layout.widths <- lattice.options("layout.widths")[[1]]
>> layout.widths$ylab <- list(x=1, units="cm", data=NULL)
>> layout.widths$panel <- list(x=1, units="null", data=NULL)
>> layout.widths$key.right <- list(x=1, units="cm", data=NULL)
>> lattice.options(layout.widths=layout.widths)
>> # Force (width of) left axis labels to be the same
>> vol_p <- levelplot(volcano, scales=list(y=list(at=seq(10, 60, 10),
>>                                               labels=rep(" ", 6))))
>> print(vol_p, newpage=FALSE, prefix="vol_p")
>> downViewport("vol_p.panel.1.1.off.vp")
>> # Draw proper left axis labels
>> grid.text(seq(10, 60, 10), x=unit(0, "npc") - unit(1, "lines"),
>>          y=unit(seq(10, 60, 10), "native"), just="right",
>>          gp=gpar(cex=.8))
>> # Determine width of levelplot panel
>> border <- grid.get("border", grep=TRUE)
>> width <- convertWidth(border$width, "in", valueOnly=TRUE)
>> xscale <- current.viewport()$xscale
>> upViewport(0)
>> pushViewport(viewport(y=.5, height=.5, just="bottom"))
>> # Force identical widths where we can
>> layout.widths$ylab <- list(x=1, units="cm", data=NULL)
>> layout.widths$panel <- list(x=width, units="in", data=NULL)
>> layout.widths$key.right <- list(x=1, units="cm", data=NULL)
>> lattice.options(layout.widths=layout.widths)
>> # Force (width of) left axis labels to be the same
>> xy_p <- xyplot(y ~ x, data = xy, xlim=xscale,
>>               scales=list(y=list(at=seq(100, 200, 20),
>>                                  labels=rep(" ", 11))))
>> print(xy_p, newpage=FALSE, prefix="xy_p")
>> downViewport("xy_p.panel.1.1.off.vp")
>> # Draw proper left axis labels
>> grid.text(seq(100, 200, 20), x=unit(0, "npc") - unit(1, "lines"),
>>          y=unit(seq(100, 200, 20), "native"), just="right",
>>          gp=gpar(cex=.8))
>> upViewport(0)
>>
>> Paul
>>
>> On 26/10/16 10:50, Ben Tupper wrote:
>>> Hi,
>>>
>>> Almost but not quite.  It certainly moves the ball down the field, and, dang, that would be way too easy!
>>>
>>> I have been fiddling with the panel.widths to the lattice::plot method.  No joy yet.
>>>
>>>
>>> Ben
>>>
>>>
>>>> On Oct 25, 2016, at 5:14 PM, Paul Murrell <paul at stat.auckland.ac.nz> wrote:
>>>>
>>>> Hi
>>>>
>>>> Does this do what you want ?
>>>>
>>>> library(latticeExtra)
>>>> c(vol_p, xy_p, x.same=TRUE)
>>>>
>>>> Paul
>>>>
>>>> On 26/10/16 04:30, Ben Tupper wrote:
>>>>> Thanks, Bert.
>>>>>
>>>>> I have used latticeExtra for layering graphics.  I'm not sure how I
>>>>> would use it to align graphics rather superimposing them.
>>>>>
>>>>> I shall look into the the custom panel plot but that is very new
>>>>> territory for me.
>>>>>
>>>>> Ben
>>>>>
>>>>>> On Oct 25, 2016, at 9:13 AM, Bert Gunter <bgunter.4567 at gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>> Write a custom panel function for levelplot() that calls
>>>>>> panel.xyplot after panel.levelplot. I believe this can also be done
>>>>>> by the +  operator of the latticeExtra package.
>>>>>>
>>>>>> You do *not* want to call xyplot after levelplot, as that
>>>>>> completely redraws the plot.
>>>>>>
>>>>>> Cheers, Bert
>>>>>>
>>>>>>
>>>>>> On Oct 25, 2016 2:55 PM, "Ben Tupper" <btupper at bigelow.org
>>>>>> <mailto:btupper at bigelow.org>> wrote: Hello,
>>>>>>
>>>>>> I am drawing a levelplot and an xyplot on a single device as shown
>>>>>> in the runnable example below.  I would like the x axes to align -
>>>>>> that is for them to cover the same extent left-to-right on the
>>>>>> device. How do I go about doing that?
>>>>>>
>>>>>> ####### # START ####### library(lattice)
>>>>>>
>>>>>> d <- dim(volcano) xy <- data.frame(x = 1:d[1], y = volcano[,30] )
>>>>>>
>>>>>> vol_p <- levelplot(volcano) xy_p <- xyplot(y ~ x, data = xy)
>>>>>>
>>>>>> print(vol_p, split = c(1, 2, 1, 2), more = TRUE) print(xy_p,  split
>>>>>> = c(1, 1, 1, 2), more = FALSE) ###### #END ######
>>>>>>
>>>>>>
>>>>>> Thanks! Ben
>>>>>>
>>>>>>
>>>>>>> sessionInfo()
>>>>>> R version 3.3.1 (2016-06-21) Platform: x86_64-apple-darwin13.4.0
>>>>>> (64-bit) Running under: OS X 10.11.6 (El Capitan)
>>>>>>
>>>>>> locale: [1]
>>>>>> en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
>>>>>>
>>>>>> attached base packages: [1] stats     graphics  grDevices utils
>>>>>> datasets  methods   base
>>>>>>
>>>>>> other attached packages: [1] lattice_0.20-33
>>>>>>
>>>>>> loaded via a namespace (and not attached): [1] tools_3.3.1
>>>>>> grid_3.3.1
>>>>>>
>>>>>>
>>>>>>
>>>>>> Ben Tupper Bigelow Laboratory for Ocean Sciences 60 Bigelow Drive,
>>>>>> P.O. Box 380 East Boothbay, Maine 04544 http://www.bigelow.org
>>>>>> <http://www.bigelow.org/>
>>>>>>
>>>>>> ______________________________________________ R-help at r-project.org
>>>>>> <mailto:R-help at r-project.org> mailing list -- To UNSUBSCRIBE and
>>>>>> more, see https://stat.ethz.ch/mailman/listinfo/r-help
>>>>>> <https://stat.ethz.ch/mailman/listinfo/r-help> PLEASE do read the
>>>>>> posting guide http://www.R-project.org/posting-guide.html
>>>>>> <http://www.r-project.org/posting-guide.html> and provide
>>>>>> commented, minimal, self-contained, reproducible code.
>>>>>>
>>>>>
>>>>> Ben Tupper Bigelow Laboratory for Ocean Sciences 60 Bigelow Drive,
>>>>> P.O. Box 380 East Boothbay, Maine 04544 http://www.bigelow.org
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> [[alternative HTML version deleted]]
>>>>>
>>>>> ______________________________________________ R-help at r-project.org
>>>>> mailing list -- To UNSUBSCRIBE and more, see
>>>>> 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.
>>>>>
>>>>
>>>> --
>>>> Dr Paul Murrell
>>>> Department of Statistics
>>>> The University of Auckland
>>>> Private Bag 92019
>>>> Auckland
>>>> New Zealand
>>>> 64 9 3737599 x85392
>>>> paul at stat.auckland.ac.nz
>>>> http://www.stat.auckland.ac.nz/~paul/
>>>
>>> Ben Tupper
>>> Bigelow Laboratory for Ocean Sciences
>>> 60 Bigelow Drive, P.O. Box 380
>>> East Boothbay, Maine 04544
>>> http://www.bigelow.org
>>>
>>>
>>>
>>
>> --
>> Dr Paul Murrell
>> Department of Statistics
>> The University of Auckland
>> Private Bag 92019
>> Auckland
>> New Zealand
>> 64 9 3737599 x85392
>> paul at stat.auckland.ac.nz
>> http://www.stat.auckland.ac.nz/~paul/
>
> Ben Tupper
> Bigelow Laboratory for Ocean Sciences
> 60 Bigelow Drive, P.O. Box 380
> East Boothbay, Maine 04544
> http://www.bigelow.org
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.



More information about the R-help mailing list