This function makes prettier boxplots. Boxplots are created using boxplot
but the axes are controlled via pretty_axis
and an adj
argument. The addition of axis labels is also more flexible because, while these can be implemented via xlab
, ylab
and main
as usual, axis labels can also be controlled using mtext
via mtext_args
.
pretty_boxplot( x, y, xadj = 0.5, ylim = NULL, pretty_axis_args = list(side = 1:2), xlab, ylab, mtext_args = list(), ... )
x | A factor vector. |
---|---|
y | A numeric vector. |
xadj, ylim | Axis limit control short-cuts. |
pretty_axis_args | A named list of arguments passed to |
xlab | The x axis label. This can be added via |
ylab | The y axis label. This can be added via |
mtext_args | A named list of arguments passed to |
... | Additional arguments passed to |
The function returns a pretty boxplot.
Note that, unlike boxplot
, formula notation is not implemented.
Edward Lavender
#### Generate example data, e.g. sex, size and maturation status of an animal set.seed(1) dx <- sample(c("M", "F"), size = 100, replace = TRUE, prob = c(0.2, 0.8)) dy <- stats::runif(length(dx), 0, 50) dx2 <- ifelse(dx < 10, "immature", "mature") d <- data.frame(x = dx, x2 = dx2, y = dy) #### Example (1): Comparing graphics::boxplot() and prettyGraphics::pretty_boxplot() pp <- par(mfrow = c(1, 2)) graphics::boxplot(y ~ x, data = d) pretty_boxplot(d$x, d$y)#>#>par(pp) ##### Example (2): Unlike graphics::boxplot() formula notation is not supported if (FALSE) { pretty_boxplot( d$y ~ d$x) } #### Example (3): Other arguments can be passed via ... to boxplot pp <- graphics::par(mfrow = c(2, 2)) graphics::boxplot(d$y ~ d$x, width = c(5, 1)) pretty_boxplot(d$x, d$y, data = d, width = c(5, 1))#>#>pretty_boxplot(d$x, d$y, data = d, varwidth = TRUE)#>#># However,xlim us is set via pretty_axis_args and should not be supplied. if (FALSE) { pretty_boxplot(d$x, d$y, xlim = c(1, 2)) } #### Example (4): Axis labels can be added via xlab, ylab and main # ... or via mtext_args for more control pretty_boxplot(d$x, d$y, xlab = "Sex", ylab = "Response")#>#>pretty_boxplot(d$x, d$y, xlab = "", ylab = "", mtext_args = list(list(side = 1, text = "Sex", font = 2, line = 2), list(side = 2, text = "Response", font = 2, line = 2)))#>#>pretty_boxplot(d$x, d$y, pretty_axis_args = list(side = 1:2, pretty = list(n = 10), axis = list(las = TRUE)))#>#># Add a box around the plot: pretty_boxplot(d$x, d$y, pretty_axis_args = list(side = 1:4, pretty = list(n = 10), axis = list(list(), list(las = TRUE), list(labels = FALSE, lwd.ticks = 0), list(labels = FALSE, lwd.ticks = 0))) )#>#>#>par(pp) #### Example (6): Examples with more groups pp <- par(mfrow = c(2, 2)) invisible( lapply(c(5, 9, 12, 15), function(n){ set.seed(1) dx <- factor(sample(1:n, size = 100, replace = TRUE)) dy <- stats::runif(length(dx), 0, 10) d <- data.frame(x = dx, y = dy) pretty_boxplot(d$x, d$y, col = "lightgrey") }) )par(pp) #### Example (7): Example with multiple categories # pretty_boxplot() does not support formula notation, so multiple categories # ... have to be joined together prior to plotting pretty_boxplot(factor(paste0(d$x, ",", d$x2)), d$y)#>#### Example (8): A single factor level n <- 1000 pretty_boxplot(rep("A", n), stats::rnorm(n, 0, 50))#>#>#>