pretty_ts | R Documentation |
This function facilitates the creation of publication-quality plots for time series. The function pulls lots of the functions provided in prettyGraphics
, which can be implemented sequentially, into a single framework. While it is often useful to call functions sequentially, this can make data exploration quicker and simpler. The function underlies vis_ts
.
pretty_ts(
x,
y1,
y2 = NULL,
fct = NULL,
fct_level = NULL,
dat = NULL,
pretty_axis_args = list(pretty = list(n = 10)),
mtext_args = list(),
add_points_args = list(),
add_lines_args = list(lwd = 1),
y2_method = "by_colour",
insert_colour_bar = TRUE,
add_colour_bar_args = list(),
subplot_args = list(size = c(0.25, 2.5), vadj = 0, hadj = 0),
pretty_axis_args_y2 = list(side = 4, pretty = list(n = 10)),
add_lines_args_y2 = list(),
list_CIs_args = list(),
add_error_envelope_args = list(),
summarise_in_bins_args = list(),
add_lines_args_summaries = list(lwd = 1),
add_shading_type = NULL,
add_shading_dtb_args = list(),
add_shading_args = list(),
add_grid_args = list(),
add_moons_args = list(),
return_list = NULL,
...
)
x |
The x coordinates. |
y1 |
The y coordinates. |
y2 |
(optional) The y coordinates of a second response variable. |
fct |
(optional) A sequence of factor values. |
fct_level |
(optional) A factor level for which to create the plot. |
dat |
A dataframe containing columns named 'x', 'y1' (and optionally) 'y2' and 'fct' can be supplied instead of |
pretty_axis_args |
A named list of arguments passed to |
mtext_args |
A named list of arguments passed to |
add_points_args |
A named list of arguments passed to |
add_lines_args |
A named list of arguments passed to |
y2_method |
A character specifying how |
insert_colour_bar |
A logical input defining whether or not to add a colour bar. This is useful if |
add_colour_bar_args |
A named list of arguments passed to |
subplot_args |
A list of arguments passed to |
pretty_axis_args_y2 |
A named list of arguments passed to |
add_lines_args_y2 |
A named list of arguments passed to |
list_CIs_args |
A named list of arguments passed to |
add_error_envelope_args |
A named list of arguments passed to |
summarise_in_bins_args |
A named list of arguments passed to |
add_lines_args_summaries |
A named list of arguments passed to |
add_shading_type |
A character input specifying the type of shading to be added. |
add_shading_dtb_args |
A named list of arguments that are passed to |
add_shading_args |
A named list of arguments passed to a |
add_grid_args |
A named list of parameters, passed to |
add_moons_args |
A named list of arguments passed to |
return_list |
(depreciated) A logical input which defines whether or not to return the list of axis parameters computed by |
... |
Other arguments passed to the |
The function returns a plot and, invisibly, the list of axis parameters computed by pretty_axis
.
Edward Lavender
#### Simulate some example date
set.seed(1)
x <- seq.POSIXt(as.POSIXct("2016-01-01", tz = "UTC"),
as.POSIXct("2016-01-10", tz = "UTC"), by = "2 hours")
y1 <- rnorm(length(x), 200, 25) *-1
y2 <- rnorm(length(x), lubridate::yday(x) * 0.5 +20, 0.5)
fct <- sample(c(1, 2), length(x), replace = TRUE)
fct_level <- 1
#### (1) The default options plot y1 against x
pp <- par(oma = c(2, 2, 2, 4))
pretty_ts(x = x, y1 = y1)
##### (2) A dataframe can be supplied instead with 'x' and 'y1' columns (and others, see below)
pretty_ts(dat = data.frame(x = x, y1 = y1))
##### (3) Plots can be created for different levels of a factor by providing 'fct' and 'fct_level'
# These can be provided via the arguments:
pretty_ts(x = x, y1 = y1, fct = fct, fct_level = fct_level)
# Or via dat, although fct_level should be specified separately:
pretty_ts(dat = data.frame(x = x, y1 = y1, fct = fct), fct_level = fct_level)
#### (4) Axes can be adjusted by supplying arguments to pretty_axis() via pretty_axis_args
pretty_ts(x = x,
y1 = y1,
pretty_axis_args = list(side = 1:2,
pretty = list(n = 5),
axis = list(las = TRUE))
)
#### (5) Axes labels can be supplied via arguments to mtext() via mtext_args
# each axes can be controlled separately via a nested list:
pretty_ts(x = x,
y1 = y1,
pretty_axis_args = list(side = 1:2,
pretty = list(n = 5),
axis = list(las = TRUE)),
mtext_args = list(list(side = 1, text = "Time", cex.axis = 1.5, line = 2.5),
list(side = 2, text = "Response", cex.axis = 1.5, line = 3))
)
#### (6) Points can be added by supplying arguments to points() via add_points_args
pretty_ts(x = x,
y1 = y1,
pretty_axis_args = list(side = 1:2,
pretty = list(n = 5),
axis = list(las = TRUE)),
mtext_args = list(list(side = 1, text = "Time", cex.axis = 1.5, line = 2.5),
list(side = 2, text = "Response", cex.axis = 1.5, line = 3)),
add_points_args = list(pch = 21, col = "dimgrey", bg = "dimgrey", cex = 0.5)
)
#### (7) Lines are contolled by supplying arguments to add_lines() via add_lines_args
pretty_ts(x = x,
y1 = y1,
pretty_axis_args = list(side = 1:2,
pretty = list(n = 5),
axis = list(las = TRUE)),
mtext_args = list(list(side = 1, text = "Time", cex.axis = 1.5, line = 2.5),
list(side = 2, text = "Response", cex.axis = 1.5, line = 3)),
add_lines_args = list(col = "red", lwd = 2))
#### (8) To colour a line by a second variable, specify y2 and y2_method = "by_colour"
pretty_ts(x = x,
y1 = y1,
y2 = y2,
pretty_axis_args = list(side = 1:2,
pretty = list(n = 5),
axis = list(las = TRUE)),
mtext_args = list(list(side = 1, text = "Time", cex.axis = 1.5, line = 2.5),
list(side = 2, text = "Response", cex.axis = 1.5, line = 3)),
add_lines_args = list(lwd = 2),
y2_method = "by_colour")
#### (9) We can supply further arguments to add_lines() via add_lines_args() to control colouration
pretty_ts(x = x,
y1 = y1,
y2 = y2,
pretty_axis_args = list(side = 1:2,
pretty = list(n = 5),
axis = list(las = TRUE)),
mtext_args = list(list(side = 1, text = "Time", cex.axis = 1.5, line = 2.5),
list(side = 2, text = "Response", cex.axis = 1.5, line = 3)),
add_lines_args = list(lwd = 2, f = viridis::viridis),
y2_method = "by_colour")
#### (10) If y2 is specified along with y2_method = "by_colour", a colour bar is automatically added
# ... This is because insert_colour_bar is TRUE by default.
# This can be turned off with insert_colour_bar = FALSE
pretty_ts(x = x,
y1 = y1,
y2 = y2,
pretty_axis_args = list(side = 1:2,
pretty = list(n = 5),
axis = list(las = TRUE)),
mtext_args = list(list(side = 1, text = "Time", cex.axis = 1.5, line = 2.5),
list(side = 2, text = "Response", cex.axis = 1.5, line = 3)),
add_lines_args = list(lwd = 2, f = viridis::viridis),
y2_method = "by_colour",
insert_colour_bar = FALSE)
#### (12) The axis of the colour bar can be adjusted by adjusting the call to add_lines_args
pretty_ts(x = x,
y1 = y1,
y2 = y2,
pretty_axis_args = list(side = 1:2,
pretty = list(n = 5),
axis = list(las = TRUE)),
mtext_args = list(list(side = 1, text = "Time", cex.axis = 1.5, line = 2.5),
list(side = 2, text = "Response", cex.axis = 1.5, line = 3)),
add_lines_args = list(lwd = 2,
f= viridis::inferno,
pretty_axis_args = list(pretty = list(n = 5),
axis = list(las = TRUE))),
y2_method = "by_colour",
insert_colour_bar = TRUE
)
#### (13) Other adjustments (e.g. add a title) can made by passing arguments to add_colour_bar()
# ... via add_colour_bar_args
pretty_ts(x = x,
y1 = y1,
y2 = y2,
pretty_axis_args = list(side = 1:2,
pretty = list(n = 5),
axis = list(las = TRUE)),
mtext_args = list(list(side = 1, text = "Time", cex.axis = 1.5, line = 2.5),
list(side = 2, text = "Response", cex.axis = 1.5, line = 3)),
add_lines_args = list(lwd = 2,
f= viridis::inferno,
pretty_axis_args = list(pretty = list(n = 5),
axis = list(las = TRUE))),
y2_method = "by_colour",
insert_colour_bar = TRUE,
add_colour_bar_args = list(mtext_args = list(side = 4, text = "Colour Bar", line = 2))
)
#### (14) The size placement of the colour bar is controlled by passing arguments
# ... to TeachingDemos::subplot() via subplot_args
pretty_ts(x = x,
y1 = y1,
y2 = y2,
pretty_axis_args = list(side = 1:2,
pretty = list(n = 5),
axis = list(las = TRUE)),
mtext_args = list(list(side = 1, text = "Time", cex.axis = 1.5, line = 2.5),
list(side = 2, text = "Response", cex.axis = 1.5, line = 3)),
add_lines_args = list(lwd = 2,
f= viridis::inferno,
pretty_axis_args = list(pretty = list(n = 5),
axis = list(las = TRUE))),
y2_method = "by_colour",
insert_colour_bar = TRUE,
add_colour_bar_args = list(mtext_args = list(side = 4, text = "Colour Bar", line = 2)),
subplot_args = list(y = -260, size = c(0.2, 2))
)
#### (15) Instead of via colouration, a second variable can be added using a new axis
# ... by specifying y2_method = "by_new_axis"
pretty_ts(x = x,
y1 = y1,
y2 = y2,
pretty_axis_args = list(side = 1:2,
pretty = list(n = 5),
axis = list(las = TRUE)),
mtext_args = list(list(side = 1, text = "Time", cex.axis = 1.5, line = 2.5),
list(side = 2, text = "Response", cex.axis = 1.5, line = 3)),
add_lines_args = list(lwd = 2),
y2_method = "by_new_axis"
)
#### (16) The colour of the second line is controlled by another call to add_lines() via
# ... add_lines_args_y2. This will add an axis to the fourth side by default:
pretty_ts(x = x,
y1 = y1,
y2 = y2,
pretty_axis_args = list(side = 1:2,
pretty = list(n = 5),
axis = list(las = TRUE)),
mtext_args = list(list(side = 1, text = "Time", cex.axis = 1.5, line = 2.5),
list(side = 2, text = "Response", cex.axis = 1.5, line = 3)),
add_lines_args = list(lwd = 2),
y2_method = "by_new_axis",
add_lines_args_y2 = list(col = "red")
)
#### (17) The second axis can be controlled via another call to pretty_axis()
# ... via pretty_axis_args_y2 and we can update mtext_args to add a label:
pretty_ts(x = x,
y1 = y1,
y2 = y2,
pretty_axis_args = list(side = 1:2,
pretty = list(n = 5),
axis = list(las = TRUE)),
mtext_args = list(list(side = 1, text = "Time", cex.axis = 1.5, line = 2.5),
list(side = 2, text = "Response", cex.axis = 1.5, line = 3),
list(side = 4, text = "Second Response", cex.axis = 1.5, line = 2)),
add_lines_args = list(lwd = 2),
y2_method = "by_new_axis",
add_lines_args_y2 = list(col = "red"),
pretty_axis_args_y2 = list(pretty = list(n = 5), axis = list(las = TRUE))
)
##### (18) Model predictions can be added by supplying arguments to list_CIs() via list_CIs_args
# Define model and predictions
m1 <- lm(y1 ~ x)
p <- predict(m1, se.fit = TRUE)
# Make plot and add predictions
pretty_ts(x = x,
y1 = y1,
y2 = y2,
pretty_axis_args = list(side = 1:2,
pretty = list(n = 5),
axis = list(las = TRUE)),
mtext_args = list(list(side = 1, text = "Time", cex.axis = 1.5, line = 2.5),
list(side = 2, text = "Response", cex.axis = 1.5, line = 3)),
add_lines_args = list(lwd = 2),
y2_method = "by_new_axis",
add_lines_args_y2 = list(col = "red"),
pretty_axis_args_y2 = list(pretty = list(n = 5), axis = list(las = TRUE)),
list_CIs_args = list(pred = p)
)
#### (19) The visualisation of model predictions can be controlled by supplying
# ... arguments to add_error_envelope() via add_error_envelope_args
pretty_ts(x = x,
y1 = y1,
y2 = y2,
pretty_axis_args = list(side = 1:2,
pretty = list(n = 5),
axis = list(las = TRUE)),
mtext_args = list(list(side = 1, text = "Time", cex.axis = 1.5, line = 2.5),
list(side = 2, text = "Response", cex.axis = 1.5, line = 3)),
add_lines_args = list(lwd = 2),
y2_method = "by_new_axis",
add_lines_args_y2 = list(col = "red"),
pretty_axis_args_y2 = list(pretty = list(n = 5), axis = list(las = TRUE)),
list_CIs_args = list(pred = p),
add_error_envelope_args = list(CI_gp = list(col = "skyblue"),
fitted_gp = list(col = "blue"))
)
#### (20) Statistical summarise of y1 in bins can be added
pretty_ts(x = x,
y1 = y1,
pretty_axis_args = list(side = 1:2,
pretty = list(n = 5),
axis = list(las = TRUE)),
summarise_in_bins_args = list(bin = "days",
funs = list(foo1 = mean,
foo2 = function(x){mean(x) + stats::sd(x)},
foo3 = function(x){mean(x) - stats::sd(x)}
)
),
add_lines_args_summaries = list(col = "red", lwd = 2, lty = 3, type = "b")
)
#### (23) The graphical parameters of each summary statistic can be controlled using a nested list:
pretty_ts(x = x,
y1 = y1,
pretty_axis_args = list(side = 1:2,
pretty = list(n = 5),
axis = list(las = TRUE)),
summarise_in_bins_args = list(bin = "days",
funs = list(foo1 = mean,
foo2 = function(x){mean(x) + stats::sd(x)},
foo3 = function(x){mean(x) - stats::sd(x)}
)
),
add_lines_args_summaries = list(list(col = "red", lty = 2),
list(col = "blue", lty = 3),
list(col = "blue", lty = 3)
)
)
#### (22) Shading can also be added, via add_shading_type, add_shading_dtb_args and/or
# ... add_shading_args. If add_shading_type = "diel" or "season", define_time_blocks()
# ... is used to define x1, x2 and lim that are passed to add_shading_bar() internally.
# ... Otherwise, custom shading can be added.
pretty_ts(x = x,
y1 = y1,
pretty_axis_args = list(side = 1:2,
pretty = list(n = 5),
axis = list(las = TRUE)),
add_shading_type = "diel",
add_shading_dtb_args = list(col = c("white", "lightgrey"),
type_args = list(lon = 65, lat = 4)
)
)
#### (23) Shading can be adjusted by supplying additional arguments to add_shading_bar()
# ... (and, in turn, graphics::rect()) via add_shading_args:
pretty_ts(x = x,
y1 = y1,
pretty_axis_args = list(side = 1:2,
pretty = list(n = 5),
axis = list(las = TRUE)),
add_shading_type = "diel",
add_shading_dtb_args = list(col = c("white", "lightgrey"),
type_args = list(lon = 65, lat = 4)
),
add_shading_args = list(border = FALSE)
)
par(pp)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.