| pretty_plot | R Documentation |
pretty_plot is a general function which creates plots with pretty axes for multiple plotting functions. The default option functions like plot but implements pretty axes using pretty_axis. Arguments can be passed to plot, but additional arguments (e.g., points_args, lines_args and mtext_args, which can be used to add points, lines and control axis labels respectively) provide additional flexibility if required. Some other plotting functions can be implemented by adjusting the plotting function, f, and by specifying whether that plot depends on x, y or x and y. The function can return the list from pretty_axis which can be useful for later adjustments to plots (e.g. setting the clipping region with clip).
pretty_plot(
x,
y = NULL,
f = graphics::plot,
plot_xy = "xy",
plot_coordinates = TRUE,
pretty_axis_args = list(side = 1:2, pretty = list(n = 5)),
xlim = NULL,
ylim = NULL,
points_args = list(),
lines_args = list(),
xlab,
ylab,
main,
mtext_args = list(),
return_list = NULL,
...
)
x |
The x coordinates or an object from which coordinates can be extracted (see Details). Coordinates are used to create the axes and may be plotted (see |
y |
(optional) The y coordinates. |
f |
A function used to create a plot. The default is |
plot_xy |
A character vector specifying whether the plotting function, |
plot_coordinates |
A logical input which defines whether or not the plotting function acts on coordinates extracted from |
pretty_axis_args |
A named list or arguments passed to |
xlim, ylim |
A vector of two axis limits. This is a short-cut to specifying axis limits via |
points_args |
A named list of arguments passed to |
lines_args |
A named list of arguments passed to |
xlab |
A character input which defines the label for the x axis. By default, this is "" so that labels can be added via |
ylab |
A character input which defines the label for the y axis. By default, this is "" so that labels can be added via |
main |
A character input which defines the label for the plot axis. By default, this is "" so that labels can be added via |
mtext_args |
A named list of arguments passed to |
return_list |
(depreciated) A logical input which defines whether or not to return the list produced by |
... |
Other parameters passed to |
x and y coordinates usually need to be provided. Some other object classes may be provided to x, from which x and y coordinates can be extracted to create axes. In this case, the user needs to indicate whether the plotting function, f, requires x and/or y and acts on extracted coordinates (plot_coordinates = TRUE) or the original object (plot_coordinates = FALSE). Objects of class density and some Spatial* objects (RasterLayer, SpatialPoints, Line, Lines, Polygon, Polygons, SpatialPolygonsDataFrame) are currently supported. If plot_xy = "xy" and only x is provided, x is treated as the response variable and plotted against an index (like plot).
The function returns a plot and, invisibly, a list of arguments that are used to create pretty axes via pretty_axis.
Edward Lavender
#### Example (1): An example with graphics::plot()
set.seed(1)
pretty_plot(stats::runif(10, 0, 1),
stats::runif(10, 0, 1),
points_args = list(pch = 21, col = scales::alpha("black", 0.8)))
#### Example (2): pretty_plot() can also work with factors.
# ... As usual, the number of breaks can be controlled via pretty_axis_args:
## Define data:
dx <- factor(LETTERS[1:10])
dy <- 1:10
## Example plots:
pp <- par(mfrow = c(2, 2))
# Specify a break for every factor level via the pretty 'n' argument.
# ... (this can also be achieved via the units argument)
pretty_plot(dx, dy,
pretty_axis_args = list(side = 1:2, pretty = list(n = 10))
)
# Specify a break for every other factor level via the pretty 'n' argument.
# ... (this can also be achieved via the units argument)
pretty_plot(dx, dy,
pretty_axis_args = list(side = 1:2, pretty = list(n = 10/2))
)
# Comparisons to default plots:
graphics::plot(dx, dy)
graphics::plot.default(dx, dy)
par(pp)
#### Example (3): If only x is provided, x is plotted against an index
pretty_plot(x = c(10, 20))
#### Example (4): Coordinates usually need to be provided
# ... but pretty_plot() works with some other objects.
## Density example
pretty_plot(density(stats::rnorm(100, 0, 1)), type = "l")
## RasterLayer example
# Define example raster
r <- raster::raster(nrows=10, ncols=10)
r <- raster::setValues(r, 1:raster::ncell(r))
# Note the use of raster::image() rather than raster::plot() for plotting
# ... because raster::plot() doesn't act on xlim or ylim arguments defined by pretty_axis().
pretty_plot(x = r, y = NULL,
f = raster::image, plot_xy = "x", plot_coordinates = FALSE)
## SpatialPolygonsDataFrame example
# Outline
pretty_plot(x = dat_coast_around_oban, y = NULL,
f = raster::plot, plot_xy = "x", plot_coordinates = FALSE)
# Customised plot
pretty_plot(x = dat_coast_around_oban, y = NULL,
pretty_axis_args = list(side = 1:4),
xlim = raster::extent(dat_coast_around_oban)[1:2],
ylim = raster::extent(dat_coast_around_oban)[3:4],
f = raster::plot, plot_xy = "x", plot_coordinates = FALSE,
col = "darkgreen")
#### Example (5): An example with stats::qqnorm()
# Define x and y values for qqnorm plot
set.seed(1)
qq <- qqplot(stats::rnorm(100, 0, 1), stats::rnorm(100, 0, 1), plot.it = FALSE)
# Define plot, saving list of axis parameters in axis_ls
# Supply x and y (qq$x and qq$y) respectively to create pretty axis limits;
# ... but use qqnorm to create plot which only required y (dd$y) (see ?stats::qqnorm)
axis_ls <- pretty_plot(qq$x, qq$y, f = stats::qqnorm, plot_xy = "y")
# Set clipping region with axis limits
usr <- par("usr")
clip(axis_ls[[1]]$lim[1], axis_ls[[1]]$lim[2], axis_ls[[2]]$lim[1], axis_ls[[2]]$lim[2])
# Add qqline within limits
qqline(qq$y)
do.call("clip", as.list(usr))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.