This function is a wrapper for image.plot
designed to streamline the visualisation of pretty matrices. The function returns a plot which can be customised.
pretty_mat( z, retain_orientation = FALSE, zlim = NULL, col = (grDevices::colorRampPalette(c("white", "yellow", "orange", "red")))(100), col_diag = NULL, grid = NULL, add_axes = TRUE, xtick_every_n = 1, ytick_every_n = xtick_every_n, cex.axis = 1, las = TRUE, xlab = "", ylab = "", ... )
z | A matrix to be plotted. |
---|---|
retain_orientation | A logical input which defines whether or not the plot should retain the same orientation as the printed matrix. The default is |
zlim | A numeric vector of length two which specifies the z axis limits (see |
col | A colour table to use for the image (see |
col_diag | (optional) A colour which, if provided, is used to shade the diagonal of the matrix. This is useful for symmetric square matrices. |
grid | (optional) A named list which, if provided, is passed to |
add_axes | A logical input which defines whether or not to add axes to the plot. Axes tick marks are given every nth column and every nth row (see below). |
xtick_every_n | A numeric input which defines the spacing between sequential tick marks for the x axis. Tick marks are given every |
ytick_every_n | A numeric input which defines the spacing between sequential tick marks for the other axis. Tick marks are given every |
cex.axis | A number which specifies the axis font size (see |
las | The style of axis labels (see |
xlab | The x axis label. |
ylab | The y axis label. |
... | Additional arguments passed to |
The function returns a plot of a matrix with coloured cells.
The limits of the plot are set between (0.5, number of rows + 0.5) and (0.5, number of cols + 0.5). Axes are added by default, but can be suppressed. If available, matrix row/column names are used to define axis labels. Otherwise, an index is used. Axes labels are added every xtick_every_n
and ytick_every_n
. If retain_orientation
is FALSE
, the plot is rotated 90 degrees counter-clockwise relative to the input matrix and thus read from the bottom-left to the top-right (like a map), so that matrix columns and corresponding tick mark labels are represented along the y axis whereas matrix rows and corresponding tick mark labels are represented along the x axis. In contrast, if retain_orientation
is TRUE
, the plot is read from the top-left to bottom-right.
Edward Lavender
#### Define an example square matrix n <- 25 mat <- matrix(sample(0:100, size = n^2, replace = TRUE), ncol = 25, nrow = 25) #### Example (1): The default options pretty_mat(mat)#### Example (2): Customisation # Adjust labelling and note how under the default settings the plot # ... is rotated by 90 degrees counter-clockwise rownames(mat) <- colnames(mat) <- LETTERS[1:nrow(mat)] pretty_mat(mat)pretty_mat(mat, xlab = "ID", ylab = "ID")# Adjust the number of labels pretty_mat(mat, xlab = "ID", ylab = "ID", xtick_every_n = 5, ytick_every_n = 2)# Compare to plot with retained orientation pretty_mat(mat, xlab = "ID", ylab = "ID", xtick_every_n = 5, ytick_every_n = 2, retain_orientation = TRUE)# Colour the diagonal (useful for symmetric square matrices) pretty_mat(mat, col_diag = "black")#### Example (3) Rectangular matrices function similarly # Define matrix n1 <- 5; n2 <- 10 mat <- matrix(sample(0:100, size = n1*n2, replace = TRUE), ncol = n1, nrow = n2) utils::str(mat)#> int [1:10, 1:5] 97 20 78 82 76 96 85 63 61 15 ...# Visualise matrix with default options pretty_mat(mat)# Adjust names rownames(mat) <- LETTERS[1:nrow(mat)] colnames(mat) <- LETTERS[1:ncol(mat)] pretty_mat(mat)# However, adding colours along the diagonal may not make sense for asymmetric matrices pretty_mat(mat, col_diag = "grey")#' #### Example (4): Understanding the retain_orientation argument: # ... Under the default option (retain_orientation is FALSE), R plots a # ... 90 degree counter-clockwise rotation of the conventional # ... printed layout of a matrix. This can be difficult to interpret. # ... retain_orientation = TRUE ensures the matrix is plotted in the # ... correct orientation # Define a simple matrix n <- 3 mat <- matrix(1:9, ncol = 3, nrow = 3) # Distinguish row names from column names rownames(mat) <- LETTERS[1:ncol(mat)] # Check matrix mat#> [,1] [,2] [,3] #> A 1 4 7 #> B 2 5 8 #> C 3 6 9