Draw two plot series with different y scales

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.

doubleYScale(obj1, obj2, = TRUE, style1 = if ( 1, style2 = if ( 2, add.axis = TRUE, add.ylab2 = FALSE, text = NULL, auto.key = if (!is.null(text)) list(text, points = points, lines = lines, ...), points = FALSE, lines = TRUE, ..., under = FALSE)
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., style1, style2
style1 and style2 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 or NULL can be given to leave the default settings. These will also be applied to the y-axes and ylab, if relevant. simply changes the defaults of the style arguments.
if TRUE, draw a second y axis (for the obj2 series) on the right side of the plot.
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".
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.
if TRUE, draw obj2 under obj1.

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.


a merged trellis object.

See Also


  • doubleYScale
library(latticeExtra) 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")) ## ...with custom styles update(doubleYScale(obj1, obj2, text = c("obj1", "obj2")), par.settings = simpleTheme(col = c('red','black'), lty = 1:2)) ## different plot types x <- rnorm(60) doubleYScale(histogram(x), densityplot(x), = FALSE) ## (but see ?as.layer for a better way to do this) ## multi-panel example ## a variant of Figure 5.13 from Sarkar (2008) ##;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")))
Documentation reproduced from package latticeExtra, version 0.6-28, License: GPL (>= 2)

Community examples

Looks like there are no examples yet.