hexpolygon.RdSimple ‘low-level’ function for computing and drawing hexagons. Can be used for ‘grid’ (package grid) or ‘traditional’ (package graphics) graphics.
hexcoords(dx, dy = NULL, n = 1, sep = NULL)
hexpolygon(x, y, hexC = hexcoords(dx, dy, n = 1), dx, dy = NULL,
fill = 1, border = 0, hUnit = "native", ...)horizontal and vertical width of the hexagon(s).
number of hexagon “repeats”.
separator value to be put between coordinates of different
hexagons. The default, NULL doesn't use a separator.
numeric vectors of the same length specifying the hexagon centers around which to draw.
a list as returned from hexcoords().
Its component no.sep determines if grid or traditional
graphics are used. The default (via default of hexcoords) is
now to use grid graphics.
passed to grid.polygon (for grid).
string or NULL determining in which units (x,y)
values are.
further arguments passed to polygon (for
graphics).
hexcoords() returns a list with components
numeric vectors of length \(n \times 6\) (or
\(n \times 7\) if sep is not NULL)
specifying the hexagon polygon coordinates (with sep appended
to each 6-tuple).
a logical indicating if sep was NULL.
hexpolygon returns what its last grid.polygon(.)
or polygon(.) call returns.
grid.hexagons which builds on these.
str(hexcoords(1, sep = NA)) # multiple of (6 + 1)
#> List of 3
#> $ x : num [1:7] 1 1 0 -1 -1 0 NA
#> $ y : num [1:7] 0.577 -0.577 -1.155 -0.577 0.577 ...
#> $ no.sep: logi FALSE
str(hexcoords(1, sep = NULL))# no separator -> multiple of 6
#> List of 3
#> $ x : num [1:6] 1 1 0 -1 -1 0
#> $ y : num [1:6] 0.577 -0.577 -1.155 -0.577 0.577 ...
#> $ no.sep: logi TRUE
# \dontshow{
stopifnot(3 * (6+1) == sapply(hexcoords(2, n = 3, sep = NA)[1:2], length),
6 == sapply(hexcoords(1)[1:2], length))
set.seed(1001)
# }
## hexpolygon()s:
x <- runif(20, -2, 2)
y <- x + rnorm(20)
## 1) traditional 'graphics'
plot(x,y, asp = 1, "plot() + hexpolygon()")
#> Warning: plot type 'plot() + hexpolygon()' will be truncated to first character
hexpolygon(x,y, dx = 0.1, density = 25, col = 2, lwd = 1.5)
## 2) "grid" :
addBit <- function(bnds, f = 0.05) bnds + c(-f, f) * diff(bnds)
sc <- addBit(rxy <- range(x,y))# same extents (cheating asp=1)
library("grid")
grid.newpage()
pushViewport(plotViewport(.1+c(4,4,2,1), xscale = sc, yscale = sc))
grid.rect()
grid.xaxis()
grid.yaxis()
grid.points(x,y)
hexpolygon(x,y, hexcoords(dx = 0.1, sep=NULL), border = "blue", fill=NA)
popViewport()