pkern_plot | R Documentation |
Plots a matrix or raster as a heatmap with an optional color bar legend. This is a wrapper
for graphics::image
similar to terra::plot
but with tighter margins to increase the
image area on screen; and with a different layout for heat-maps of matrices, which are
plotted with i and j axes (row and column numbers) replacing y and x.
pkern_plot(g, gdim = NULL, ...)
g |
vector or any object understood by |
gdim |
numeric vector, (optional) grid dimensions of the data |
... |
plotting parameters (see details) |
g
can be a vector, in which case gdim
supplies the y, x dimensions (ie number
of rows, number of columns), in that order. g
can also can be a matrix, raster or any
other object understood by pkern_grid
(in which case gdim
can be omitted).
The data in g
can be of numeric, integer, logical, or factor class. The numeric class is
plotted with a continuous color bar legend, while the others get a categorical legend.
Category names (ie tick labels) for the legend can be supplied in argument breaks
, with
one character string for each unique non-NA value in g
, as integer, in ascending order.
If the data are continuous, breaks
can either be the desired number of bins for coloring,
or a vector of break points delineating bins (passed to graphics::image
). Note that a set
of n
bins has n+1
break points.
pal
should be one of the palette names returned by graphics::hcl.pals
, or else a
vector of color names with length one fewer than the number of break points.
If the data are all NA
, the function omits the heatmap and legend, and draws grid lines
instead. col_grid
can be specified to enable/disable grid lines more generally. These
lines can sometimes appear misaligned due to anti-aliasing. If this is a problem, try
switching to a different graphics device back-end (eg. in Windows Rstudio, try changing from
the default to Cairo with options(RStudioGD.backend = 'cairo')
).
The function sets the graphical parameters 'oma' (to c(0,0,0,0)
) and 'mar' (to values
between 1.1 and 5.1, depending on whether titles, axes, and legend are plotted), then calls
graphics::image
, which sets other graphical parameters such as 'usr'. By default all
graphical parameters are reset to their original values at the end of the function call.
reset=FALSE
prevents this, so that additional elements can be added to the plot later
(such as by calling sf::st_plot(.., add=TRUE)
or graphics:lines
).
The function returns a vector of suggested plot height and width values in units of
inches wich minimize the unused margin space. For example to save a trim version of your
plot as png, call pkern_plot
first to get the suggested height and width, say y
and x
,
then pass the result to png(filename, height=m*y, width=m*x, pointsize=m*12, ...)
,
where m
is any positive scaling factor.
The following style parameters are optional:
numeric in 0,1: respectively, the horizontal justification of the title and vertical justification of the color bar legend (default 0.5 for both)
numeric or NA: the aspect ratio parameter passed to graphics::image (default 1)
logical: respectively indicates to draw axes (y and x, or i and j), the color bar legend (default TRUE)
numeric (vector) or character vector: the color break points (see details)
character: respectively, the colors to use for drawing a box around the image border and for drawing grid cell boundaries (NA to omit)
logical: respectively, inverts (default FALSE), and reverses the color scale (default TRUE
logical: enables/disables matrix style plot with j axis annotations on top (default TRUE for vector and matrix input, otherwise FALSE)
integer: the layer (column) to plot (default 1)
numeric: respectively, line widths for the axis lines and ticks (0 to omit, default 1)
character: respectively, a title to put on top in bold, a legend title to put over the color bar, and axis titles for dimensions y and x. Setting to ” omits both the label and its margin space
logical: removes all annotation (except as otherwise specified by
axes
and/or leg
)
character (vector): one of graphics::hcl.pals
(default 'Spectral') or a
vector of colors
logical: indicates to restore original graphical parameters after plot is finished (default TRUE)
numeric vector: range in the data to plot (ignored for discrete plots)
logical: toggles the placement of the horizontal dimension axis on top vs bottom
# example grid
gdim = c(50, 100)
n = prod(gdim)
g = pkern_grid(gdim)
# plot the grid layout as raster then as matrix
pkern_plot(g)
pkern_plot(g, ij=TRUE)
# example data: cosine of squared distance to top left corner
z = apply(expand.grid(g$gyx), 1, \(z) cos( 2*sum(z^2) ) )
g_example = modifyList(g, list(gval=z))
pkern_plot(g_example)
# plot as matrix (changes default palette)
pkern_plot(g_example, ij=T)
# alignment
pkern_plot(g_example, ij=T, main='Centered title and legend by default')
pkern_plot(g_example, ij=T, main='adj: left-right justification of title', adj=0)
pkern_plot(g_example, ij=T, main='leg_just: top-bottom justification of color bar', leg_just=0)
# set the palette - see hcl.pals() for valid names
pal = 'Zissou 1'
pkern_plot(g_example, pal=pal, main=pal)
pkern_plot(g_example, pal=pal, main=pal, col_invert=TRUE)
pkern_plot(g_example, pal=pal, main=pal, col_invert=TRUE, col_rev=TRUE)
# example data: cosine of distance to top left corner
z = apply(expand.grid(g$gyx), 1, \(z) cos( sqrt(sum(z^2))/50 ) )
g_example = modifyList(g, list(gval=z))
pkern_plot(g_example)
# specify the layer for multi-layer objects (default is first layer)
g_example = modifyList(g, list(gval=cbind(z, z^2), idx_grid=seq(n)))
pkern_plot(g_example)
pkern_plot(g_example, layer=2)
# reduce number of color breaks or specify a factor for discrete value plots
pkern_plot(g_example, breaks=50)
pkern_plot(g_example, breaks=3) # not a great way to bin the data
pkern_plot(g=modifyList(g, list(gval=cut(z, 3, dig.lab=1))))
# pass color bar labels for discrete plots in breaks (in order low to high)
pkern_plot(modifyList(g, list(gval=cut(z, 3))), breaks=c('a', 'b', 'c'), zlab='group')
# select some "observed" points and make a covariance matrix
idx_obs = match(seq(n), sort(sample.int(prod(gdim), 1e2)))
g_v_example = modifyList(g_example, list(gval=idx_obs))
v = pkern_var(g_v_example)
# matrix display mode is automatic when first argument is a matrix or vector
pkern_plot(v, zlab=expression(V[ij]))
# minimal versions
pkern_plot(v, minimal=T)
pkern_plot(v, minimal=T, leg=T)
pkern_plot(v, minimal=T, col_grid='white', leg=TRUE)
# logical matrix plots are grayscale by default
pkern_plot(v > 1e-2, main='logical matrix')
# logical, integer and factor class matrices get a discrete color-bar
interval = 1e-2 # try also 1e-3 to see behaviour with large number of bins
v_discrete = cut(v, seq(0, ceiling(max(v)), by=interval), dig.lab=2)
pkern_plot(as.character(v_discrete), dim(v))
# labels are preserved for character matrices
z_char = rep(c('foo', 'bar'), n/2)
z_char[sample.int(n, n/2)] = NA
pkern_plot(g=z_char, gdim)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.