Title: | Grammar of Graphics and Plot Helpers for Time Series Visualization |
Version: | 0.1.0 |
Description: | Extends the capabilities of 'ggplot2' by providing grammatical elements and plot helpers designed for visualizing temporal patterns. The package implements a grammar of temporal graphics, which leverages calendar structures to highlight changes over time. The package also provides plot helper functions to quickly produce commonly used time series graphics, including time plots, season plots, and seasonal sub-series plots. |
License: | GPL (≥ 3) |
Suggests: | testthat (≥ 3.0.0), tsibbledata, feasts, fable, ggrepel |
Config/testthat/edition: | 3 |
Encoding: | UTF-8 |
RoxygenNote: | 7.3.2.9000 |
Imports: | lifecycle, rlang, timechange, tsibble, fabletools, dplyr, tidyr, ggplot2, lubridate, gtable, scales, vctrs |
NeedsCompilation: | no |
Packaged: | 2025-06-05 14:11:01 UTC; mitchell |
Author: | Mitchell O'Hara-Wild
|
Maintainer: | Mitchell O'Hara-Wild <mail@mitchelloharawild.com> |
Repository: | CRAN |
Date/Publication: | 2025-06-10 09:10:02 UTC |
ggtime: Grammar of Graphics and Plot Helpers for Time Series Visualization
Description
Extends the capabilities of 'ggplot2' by providing grammatical elements and plot helpers designed for visualizing temporal patterns. The package implements a grammar of temporal graphics, which leverages calendar structures to highlight changes over time. The package also provides plot helper functions to quickly produce commonly used time series graphics, including time plots, season plots, and seasonal sub-series plots.
Author(s)
Maintainer: Mitchell O'Hara-Wild mail@mitchelloharawild.com (ORCID)
Authors:
Decomposition plots
Description
Produces a faceted plot of the components used to build the response variable of the dable. Useful for visualising how the components contribute in a decomposition or model.
Usage
## S3 method for class 'dcmp_ts'
autoplot(object, .vars = NULL, scale_bars = TRUE, level = c(80, 95), ...)
Arguments
object |
A dable. |
.vars |
The column of the dable used to plot. By default, this will be the response variable of the decomposition. |
scale_bars |
If |
level |
If the decomposition contains distributions, which levels should be used to display intervals? |
... |
Further arguments passed to |
Value
A ggplot object showing a set of time plots of the decomposition.
Examples
library(feasts)
tsibbledata::aus_production %>%
model(STL(Beer)) %>%
components() %>%
autoplot()
Plot time series from a tsibble
Description
Produces a time series plot of one or more variables from a tsibble. If the tsibble contains a multiple keys, separate time series will be identified by colour.
Usage
## S3 method for class 'tbl_ts'
autoplot(object, .vars = NULL, ...)
## S3 method for class 'tbl_ts'
autolayer(object, .vars = NULL, ...)
Arguments
object |
A tsibble. |
.vars |
A bare expression containing data you wish to plot. Multiple variables can be plotted using |
... |
Further arguments passed to |
Value
A ggplot object showing a time plot of a time series.
Examples
library(fable)
library(tsibbledata)
library(tsibble)
tsibbledata::gafa_stock %>%
autoplot(vars(Close, log(Close)))
Plot characteristic ARMA roots
Description
Produces a plot of the inverse AR and MA roots of an ARIMA model. Inverse roots outside the unit circle are shown in red.
Usage
gg_arma(data)
Arguments
data |
A mable containing models with AR and/or MA roots. |
Details
Only models which compute ARMA roots can be visualised with this function.
That is to say, the glance()
of the model contains ar_roots
and ma_roots
.
Value
A ggplot object the characteristic roots from ARMA components.
Examples
if (requireNamespace("fable", quietly = TRUE)) {
library(fable)
library(tsibble)
library(dplyr)
tsibbledata::aus_retail %>%
filter(
State == "Victoria",
Industry == "Cafes, restaurants and catering services"
) %>%
model(ARIMA(Turnover ~ pdq(0,1,1) + PDQ(0,1,1))) %>%
gg_arma()
}
Plot impulse response functions
Description
Produces a plot of impulse responses from an impulse response function.
Usage
gg_irf(data, y = all_of(measured_vars(data)))
Arguments
data |
A tsibble with impulse responses |
y |
The impulse response variables to plot (defaults to all measured variables). |
Value
A ggplot object of the impulse responses.
Lag plots
Description
A lag plot shows the time series against lags of itself. It is often coloured the seasonal period to identify how each season correlates with others.
Usage
gg_lag(
data,
y = NULL,
period = NULL,
lags = 1:9,
geom = c("path", "point"),
arrow = FALSE,
...
)
Arguments
data |
A tidy time series object (tsibble) |
y |
The variable to plot (a bare expression). If NULL, it will automatically selected from the data. |
period |
The seasonal period to display. If NULL (default), the largest frequency in the data is used. If numeric, it represents the frequency times the interval between observations. If a string (e.g., "1y" for 1 year, "3m" for 3 months, "1d" for 1 day, "1h" for 1 hour, "1min" for 1 minute, "1s" for 1 second), it's converted to a Period class object from the lubridate package. Note that the data must have at least one observation per seasonal period, and the period cannot be smaller than the observation interval. |
lags |
A vector of lags to display as facets. |
geom |
The geometry used to display the data. |
arrow |
Arrow specification to show the direction in the lag path. If
TRUE, an appropriate default arrow will be used. Alternatively, a user
controllable arrow created with |
... |
Additional arguments passed to the geom. |
Value
A ggplot object showing a lag plot of a time series.
Examples
library(tsibble)
library(dplyr)
tsibbledata::aus_retail %>%
filter(
State == "Victoria",
Industry == "Cafes, restaurants and catering services"
) %>%
gg_lag(Turnover)
Seasonal plot
Description
Produces a time series seasonal plot. A seasonal plot is similar to a regular time series plot, except the x-axis shows data from within each season. This plot type allows the underlying seasonal pattern to be seen more clearly, and is especially useful in identifying years in which the pattern changes.
Usage
gg_season(
data,
y = NULL,
period = NULL,
facet_period = NULL,
max_col = Inf,
max_col_discrete = 7,
pal = (scales::hue_pal())(9),
polar = FALSE,
labels = c("none", "left", "right", "both"),
labels_repel = FALSE,
labels_left_nudge = 0,
labels_right_nudge = 0,
...
)
Arguments
data |
A tidy time series object (tsibble) |
y |
The variable to plot (a bare expression). If NULL, it will automatically selected from the data. |
period |
The seasonal period to display. If NULL (default), the largest frequency in the data is used. If numeric, it represents the frequency times the interval between observations. If a string (e.g., "1y" for 1 year, "3m" for 3 months, "1d" for 1 day, "1h" for 1 hour, "1min" for 1 minute, "1s" for 1 second), it's converted to a Period class object from the lubridate package. Note that the data must have at least one observation per seasonal period, and the period cannot be smaller than the observation interval. |
facet_period |
A secondary seasonal period to facet by (typically smaller than period). |
max_col |
The maximum number of colours to display on the plot. If the
number of seasonal periods in the data is larger than |
max_col_discrete |
The maximum number of colours to show using a discrete colour scale. |
pal |
A colour palette to be used. |
polar |
If TRUE, the season plot will be shown on polar coordinates. |
labels |
Position of the labels for seasonal period identifier. |
labels_repel |
If TRUE, the seasonal period identifying labels will be repelled with the ggrepel package. |
labels_left_nudge , labels_right_nudge |
Allows seasonal period identifying labels to be nudged to the left or right from their default position. |
... |
Additional arguments passed to geom_line() |
Value
A ggplot object showing a seasonal plot of a time series.
References
Hyndman and Athanasopoulos (2019) Forecasting: principles and practice, 3rd edition, OTexts: Melbourne, Australia. https://OTexts.com/fpp3/
Examples
library(tsibble)
library(dplyr)
tsibbledata::aus_retail %>%
filter(
State == "Victoria",
Industry == "Cafes, restaurants and catering services"
) %>%
gg_season(Turnover)
Seasonal subseries plots
Description
A seasonal subseries plot facets the time series by each season in the seasonal period. These facets form smaller time series plots consisting of data only from that season. If you had several years of monthly data, the resulting plot would show a separate time series plot for each month. The first subseries plot would consist of only data from January. This case is given as an example below.
Usage
gg_subseries(data, y = NULL, period = NULL, ...)
Arguments
data |
A tidy time series object (tsibble) |
y |
The variable to plot (a bare expression). If NULL, it will automatically selected from the data. |
period |
The seasonal period to display. If NULL (default), the largest frequency in the data is used. If numeric, it represents the frequency times the interval between observations. If a string (e.g., "1y" for 1 year, "3m" for 3 months, "1d" for 1 day, "1h" for 1 hour, "1min" for 1 minute, "1s" for 1 second), it's converted to a Period class object from the lubridate package. Note that the data must have at least one observation per seasonal period, and the period cannot be smaller than the observation interval. |
... |
Additional arguments passed to geom_line() |
Details
The horizontal lines are used to represent the mean of each facet, allowing easy identification of seasonal differences between seasons. This plot is particularly useful in identifying changes in the seasonal pattern over time.
similar to a seasonal plot (gg_season()
), and
Value
A ggplot object showing a seasonal subseries plot of a time series.
References
Hyndman and Athanasopoulos (2019) Forecasting: principles and practice, 3rd edition, OTexts: Melbourne, Australia. https://OTexts.com/fpp3/
Examples
library(tsibble)
library(dplyr)
tsibbledata::aus_retail %>%
filter(
State == "Victoria",
Industry == "Cafes, restaurants and catering services"
) %>%
gg_subseries(Turnover)
Ensemble of time series displays
Description
Plots a time series along with its ACF along with an customisable third graphic of either a PACF, histogram, lagged scatterplot or spectral density.
Usage
gg_tsdisplay(
data,
y = NULL,
plot_type = c("auto", "partial", "season", "histogram", "scatter", "spectrum"),
lag_max = NULL
)
Arguments
data |
A tidy time series object (tsibble) |
y |
The variable to plot (a bare expression). If NULL, it will automatically selected from the data. |
plot_type |
type of plot to include in lower right corner. By default
( |
lag_max |
maximum lag at which to calculate the acf. Default is 10*log10(N/m) where N is the number of observations and m the number of series. Will be automatically limited to one less than the number of observations in the series. |
Value
A list of ggplot objects showing useful plots of a time series.
Author(s)
Rob J Hyndman & Mitchell O'Hara-Wild
References
Hyndman and Athanasopoulos (2019) Forecasting: principles and practice, 3rd edition, OTexts: Melbourne, Australia. https://OTexts.com/fpp3/
See Also
plot.ts
, feasts::ACF()
,
spec.ar
Examples
library(tsibble)
library(dplyr)
tsibbledata::aus_retail %>%
filter(
State == "Victoria",
Industry == "Cafes, restaurants and catering services"
) %>%
gg_tsdisplay(Turnover)
Ensemble of time series residual diagnostic plots
Description
Plots the residuals using a time series plot, ACF and histogram.
Usage
gg_tsresiduals(data, type = "innovation", plot_type = "histogram", ...)
Arguments
data |
A mable containing one model with residuals. |
type |
The type of residuals to compute. If |
plot_type |
type of plot to include in lower right corner. By default
( |
... |
Additional arguments passed to |
Value
A list of ggplot objects showing a useful plots of a time series model's residuals.
References
Hyndman and Athanasopoulos (2019) Forecasting: principles and practice, 3rd edition, OTexts: Melbourne, Australia. https://OTexts.com/fpp3/
See Also
Examples
if (requireNamespace("fable", quietly = TRUE)) {
library(fable)
tsibbledata::aus_production %>%
model(ETS(Beer)) %>%
gg_tsresiduals()
}
Objects exported from other packages
Description
These objects are imported from other packages. Follow the links below to see their documentation.