Learn R Programming

zoo (version 1.8-11)

ggplot2.zoo: Convenience Functions for Plotting zoo Objects with ggplot2

Description

fortify.zoo takes a zoo object and converts it into a data frame (intended for ggplot2). autoplot.zoo takes a zoo object and returns a ggplot2 object. It essentially uses the mapping aes(x = Time, y = Value, group = Series) and adds colour = Series, linetype = Series, shape = Series in the case of a multivariate series with facets = NULL.

Usage

# S3 method for zoo
autoplot(object, geom = "line", facets, ...)
  # S3 method for zoo
fortify(model, data, 
	names = c("Index", "Series", "Value"),
	melt = FALSE, sep = NULL, ...)
  facet_free(facets = Series ~ ., margins = FALSE, scales = "free_y", ...)

yearmon_trans(format = "%b %Y", n = 5) scale_x_yearmon(..., format = "%b %Y", n = 5) scale_y_yearmon(..., format = "%b %Y", n = 5)

yearqtr_trans(format = "%Y-%q", n = 5) scale_x_yearqtr(..., format = "%Y-%q", n = 5) scale_y_yearqtr(..., format = "%Y-%q", n = 5)

Value

fortify.zoo returns a data.frame either in long format (melt = TRUE) or in wide format (melt = FALSE). The long format has three columns: the time Index, a factor indicating the Series, and the corresponding Value. The wide format simply has the time Index plus all columns of coredata(model).

autoplot.zoo returns a ggplot object.

Arguments

object

an object of class "zoo".

geom

character specifying which geom to use in qplot.

facets

specification of facets for qplot. The default in the autoplot method is to use facets = NULL for univariate series and facets = Series ~ . for multivariate series.

...

further arguments passed to qplot for autoplot (and not used for fortify). For the scale_*_* functions the arguments are passed on to scale_*_continuous.

model

an object of class "zoo" to be converted to a "data.frame".

data

not used (required by generic fortify method).

names

(list of) character vector(s). New names given to index/time column, series indicator (if melted), and value column (if melted). If only a subset of characters should be changed, either NAs can be used or a named vector.

sep

If specified then the Series column is split into multiple columns using sep as the split character.

melt

Should the resulting data frame be in long format (melt = TRUE) or wide format (melt = FALSE).

margins

As in facet_grid.

scales

As in facet_grid except it defaults to "free_y".

format

A format acceptable to format.yearmon or format.yearqtr.

n

Approximate number of axis ticks.

Author

Trevor L. Davis trevor.l.davis@gmail.com, Achim Zeileis

Details

Convenience interface for visualizing zoo objects with ggplot2. autoplot.zoo uses fortify.zoo (with melt = TRUE) to convert the zoo object into a data frame and then uses a suitable aes() mapping to visiualize the series.

See Also

Examples

Run this code
if(require("ggplot2") && require("scales")) {
suppressWarnings(RNGversion("3.5.0"))
set.seed(1)

## example data
x.Date <- as.Date(paste(2003, 02, c(1, 3, 7, 9, 14), sep = "-"))
x <- zoo(rnorm(5), x.Date)
xlow <- x - runif(5)
xhigh <- x + runif(5)
z <- cbind(x, xlow, xhigh)

## univariate plotting
autoplot(x)
## by hand
ggplot(aes(x = Index, y = Value), data = fortify(x, melt = TRUE)) +
  geom_line() + xlab("Index") + ylab("x")
## adding series one at a time
last_plot() + geom_line(aes(x = Index, y = xlow), colour = "red", data = fortify(xlow))
## add ribbon for high/low band
ggplot(aes(x = Index, y = x, ymin = xlow, ymax = xhigh), data = fortify(x)) +
  geom_ribbon(fill = "darkgray") + geom_line()

## multivariate plotting in multiple or single panels
autoplot(z)                      ## multiple without color/linetype
autoplot(z, facets = Series ~ .) ## multiple with series-dependent color/linetype
autoplot(z, facets = NULL)       ## single with series-dependent color/linetype
## by hand with color/linetype and with/without facets
qplot(x = Index, y = Value, group = Series, colour = Series,
  linetype = Series, facets = Series ~ ., data = fortify(z, melt = TRUE)) +
  geom_line() + xlab("Index") + ylab("")
ggplot(aes(x = Index, y = Value, group = Series, colour = Series, linetype = Series),
  data = fortify(z, melt = TRUE)) + geom_line() + xlab("Index") + ylab("")
## variations
autoplot(z, geom = "point")
autoplot(z, facets = NULL) + geom_point()
autoplot(z, facets = NULL) + scale_colour_grey() + theme_bw()

## for "ts" series via coercion
autoplot(as.zoo(EuStockMarkets))
autoplot(as.zoo(EuStockMarkets), facets = NULL)

autoplot(z) + 
	aes(colour = NULL, linetype = NULL) +
	facet_grid(Series ~ ., scales = "free_y")

autoplot(z) + aes(colour = NULL, linetype = NULL) + facet_free() # same

z.yq <- zooreg(rnorm(50), as.yearqtr("2000-1"), freq = 4)
autoplot(z.yq)

## mimic matplot
data <- cbind(A = c(6, 1, NA, NA), B = c(16, 4, 1, NA), C = c(25, 7, 2, 1))
autoplot(zoo(data), facet = NULL) + geom_point()
## with different line types
autoplot(zoo(data), facet = NULL) + geom_point() + aes(linetype = Series)

## illustrate just fortify() method
z <- zoo(data)
fortify(z)
fortify(z, melt = TRUE)
fortify(z, melt = TRUE, names = c("Time", NA, "Data"))
fortify(z, melt = TRUE, names = c(Index = "Time"))

## with/without splitting
z <- zoo(cbind(a.A = 1:2, a.B = 2:3, b.A = 3:4, c.B = 4:5))
fortify(z)
fortify(z, melt = TRUE, sep = ".", names = list(Series = c("Lower", "Upper")))

## scale_x_yearmon with custom discrete breaks
df <-  data.frame(dates = as.yearmon("2018-08") + 0:6/12, values = c(2:6, 0, 1))
ggdf <- ggplot(df, aes(x = dates, y = values)) +
  geom_bar(position = "dodge", stat = "identity") + theme_light() +
  xlab("Month") + ylab("Values")
ggdf ## with default scale_x_yearmon
ggdf + scale_x_yearmon(breaks = df$dates) ## with custom discrete breaks
}

Run the code above in your browser using DataLab