doubleYScale {latticeExtra}R Documentation

Draw two plot series with different y scales

Description

Overplot two trellis objects with different y scales, optionally in different styles, adding a second y axis, and/or a second y axis label.

Note: drawing plots with multiple scales is often a bad idea as it can be misleading.

Usage

doubleYScale(obj1, obj2, use.style = TRUE, add.axis = TRUE,
             add.ylab2 = FALSE, style1 = 1, style2 = 2,
             text = NULL, auto.key = if (!is.null(text))
               list(text, points = points, lines = lines, ...),
             points = FALSE, lines = TRUE, ...)

Arguments

obj1, obj2 trellis objects. Note that most settings, like main/sub/legend/etc are taken only from obj1; only the panel, axis and ylab are taken from obj2.
use.style if TRUE, set plot style (with trellis.par.set) to different style settings for each series. The settings are taken mainly from trellis.par.get("superpose.line"). These will also be applied to the y-axes and ylab, if relevant.
add.axis if TRUE, draw a second y axis (for the obj2 series) on the right side of the plot.
add.ylab2 if TRUE, draw a second y axis label (from obj2$ylab) on the right side of the plot. Note, this will replace any existing key or legend on the right side, i.e. with space = "right".
style1, style2 if use.style is TRUE, these give the `group number' for obj1 and obj2 respectively. The style is taken from these indices into the values of trellis.par.get("superpose.line"). Therefore these should be integers between 1 and 6; a value of 0 can be given to leave the default settings.
text, auto.key, points, lines, ... if non-NULL, add a key to the display, using entries named by text. Further arguments are passed on to simpleKey at plot time.

Details

Panels from the trellis object obj2 will be drawn in the corresponding panel of obj1.

Axis settings are taken from the trellis objects, so most scales arguments such as draw, at, labels etc from obj2 will carry over to the second y axis.

Value

a merged trellis object.

Author(s)

Felix Andrews

See Also

as.layer

Alias

doubleYScale

Keyword

aplot

Examples

set.seed(1)
foo <- list(x = 1:100, y = cumsum(rnorm(100)))
## show original data
xyplot(y + y^2 ~ x, foo, type = "l")
## construct separate plots for each series
obj1 <- xyplot(y ~ x, foo, type = "l")
obj2 <- xyplot(y^2 ~ x, foo, type = "l")
## simple case: no axis for the overlaid plot
doubleYScale(obj1, obj2, add.axis = FALSE)
## draw second y axis
doubleYScale(obj1, obj2)
## ...with second ylab
doubleYScale(obj1, obj2, add.ylab2 = TRUE)
## ...or with a key
doubleYScale(obj1, obj2, text = c("obj1", "obj2"))

## different plot types
x <- rnorm(60)
doubleYScale(histogram(x), densityplot(x), use.style = FALSE)

## multi-panel example
## a variant of Figure 5.13 from Sarkar (2008)
## http://lmdvr.r-forge.r-project.org/figures/figures.html?chapter=05;figure=05_13
data(SeatacWeather)
temp <- xyplot(min.temp + max.temp ~ day | month,
               data = SeatacWeather, type = "l", layout = c(3, 1))
rain <- xyplot(precip ~ day | month, data = SeatacWeather, type = "h")

doubleYScale(temp, rain, style1 = 0, style2 = 3, add.ylab2 = TRUE,
   text = c("min. T", "max. T", "rain"), columns = 3)

## re-plot with different styles
update(trellis.last.object(),
   par.settings = simpleTheme(col = c("black", "red", "blue")))

Results


R version 2.9.0 (2009-04-17)
Copyright (C) 2009 The R Foundation for Statistical Computing
ISBN 3-900051-07-0

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library(latticeExtra)
> png(filename="images/doubleYScale_%03d.png" ,width=480, height=480)
> ### Name: doubleYScale
> ### Title: Draw two plot series with different y scales
> ### Aliases: doubleYScale
> ### Keywords: aplot
> 
> ### ** Examples
> 
> set.seed(1)
> foo <- list(x = 1:100, y = cumsum(rnorm(100)))
> ## show original data
> xyplot(y + y^2 ~ x, foo, type = "l")
> ## construct separate plots for each series
> obj1 <- xyplot(y ~ x, foo, type = "l")
> obj2 <- xyplot(y^2 ~ x, foo, type = "l")
> ## simple case: no axis for the overlaid plot
> doubleYScale(obj1, obj2, add.axis = FALSE)
> ## draw second y axis
> doubleYScale(obj1, obj2)
> ## ...with second ylab
> doubleYScale(obj1, obj2, add.ylab2 = TRUE)
> ## ...or with a key
> doubleYScale(obj1, obj2, text = c("obj1", "obj2"))
> 
> ## different plot types
> x <- rnorm(60)
> doubleYScale(histogram(x), densityplot(x), use.style = FALSE)
> 
> ## multi-panel example
> ## a variant of Figure 5.13 from Sarkar (2008)
> ## http://lmdvr.r-forge.r-project.org/figures/figures.html?chapter=05;figure=05_13
> data(SeatacWeather)
> temp <- xyplot(min.temp + max.temp ~ day | month,
+                data = SeatacWeather, type = "l", layout = c(3, 1))
> rain <- xyplot(precip ~ day | month, data = SeatacWeather, type = "h")
> 
> doubleYScale(temp, rain, style1 = 0, style2 = 3, add.ylab2 = TRUE,
+    text = c("min. T", "max. T", "rain"), columns = 3)
> 
> ## re-plot with different styles
> update(trellis.last.object(),
+    par.settings = simpleTheme(col = c("black", "red", "blue")))
> 
> 
> 
> dev.off()
null device 
          1 
> 









[Package latticeExtra Index]