hexagons {hexbin} | R Documentation |
Plots cells in an hexbin object. The function distinquishes among
counts using 5 different styles. This function is the hexagon
plotting engine called from plot.hexbin()
.
hexagons(dat, style = c("colorscale", "centroids", "lattice", "nested.lattice", "nested.centroids"), minarea = 0.05, maxarea = 0.8, mincnt = 1, maxcnt = max(dat$cnt), trans = NULL, colorcut = seq(1, 0, length = 17), density = NULL, border = NULL, pen = NULL, colramp = function(n){ LinGray(n,beg = 90, end = 15) }, verbose = getOption("verbose"))
dat |
an object of class hexbin , see hexbin . |
style |
character specifying the type of plotting; must be one of ("grayscale","lattice","centroids","nested.lattice","nested.centroids"). |
minarea |
numeric, the fraction of cell area for the lowest count. |
maxarea |
the fraction of the cell area for the largest count. |
mincnt |
Cells with smaller counts are not shown. |
maxcnt |
Cells with large counts are not shown. |
trans |
a transformation function (or NULL ) for the counts
such as sqrt() . |
colorcut |
A vector of values covering [0, 1] which determine hexagon color class boundaries or hexagon size boundaries. |
density |
polygon argument for shading. -1 causes
the polygon not to be filled. |
border |
polygon() argument. Draw the border for
each hexagon. |
pen |
colors for polygon() . Determines the color
with which the polygon will be filled. |
colramp |
function of an integer argument n returning n
colors. n is determined |
verbose |
logical indicating if some diagnostic output should happen. |
The five plotting styles have the following effect:
style="lattice"
or "centroids"
Plots the hexagons in different sizes based on counts. The
"lattice"
version centers the hexagons at the cell centers
whereas "centroids"
moves the hexagon centers close to the
center of mass for the cells. In all cases the hexagons will not
plot outside the cell unless maxarea > 1
. Counts are rescaled
into the interval [0,1] and colorcuts determine the class
boundaries for sizes and counts. The pen argument for this style
should be a single color or a vector of colors of
length(bin$cnt)
.
style="colorscale"
style="nested.lattice"
and "nested.centroids"
If the pen argument is used it should be a matrix of colors with 2
columns and either ceiling(log10(max(bin$cnt)))
or
length(bin$cnt)
rows. The default uses the R color palatte
so that pens numbers 2-11 determine colors for completely filled
cell Pen 2 is the color for 1's, Pen 3 is the color for 10's, etc.
Pens numbers 12-21 determine the color of the foreground hexagons. The
hexagon size shows the relative count for the power of 10. Different
color schemes give different effects including 3-D illusions
Hexagon size encoding minarea
and maxarea
determine the area of the smallest and largest hexagons
plotted. Both are expressed fractions of the bin cell size. Typical
values might be .04 and 1. When both values are 1, all plotted
hexagons are bin cell size, if maxarea
is greater than 1 than
hexagons will overlap. This is sometimes interesting with the lattice
and centroid styles.
Count scaling
relcnt <- (trans(cnt)-trans(mincnt)) / (trans(maxcnt)-trans(mincnt))
area <- minarea + relcnt*maxarea
By default the transformation trans()
is the identity
function. The legend routine requires the transformation inverse
for some options.
Count windowing mincnt
and maxcnt
Only routine only plots cells with cnts in [mincnts, maxcnts]
Adds hexagons to the plot.
Dan Carr <dcarr@voxel.galaxy.gmu.edu>; ported and extended by Nicholas Lewin-Koh nikko@hailmail.net.
Carr, D. B. (1991) Looking at Large Data Sets Using Binned Data Plots, pp. 7–39 in Computing and Graphics in Statistics; Eds. A. Buja and P. Tukey, Springer-Verlag, New York.
hexbin
, smooth.hexbin
,
erode.hexbin
, hcell
, hcell2xy
,
plot.hexbin
, hboxplot
, hdiffplot
,
hmatplot
, hex.legend
set.seed(506) x <- rnorm(10000) y <- rnorm(10000) # bin the points bin <- hexbin(x,y) ## setup coordinate system: plot(bin$xbnd, bin$ybnd, type="n", main = "Bivariate rnorm(10000)", asp=1) hexagons(bin) # A better approach uses plot.hexbin # which controls the plot shape : plot(bin, main = "Bivariate rnorm(10000)") ## or plot(hexbin(x, y + x*(x+1)/4), main = "(X, X(X+1)/4 + Y) where X,Y ~ rnorm(10000)") # A mixture distribution x <- c(rnorm(5000),rnorm(5000,4,1.5)) y <- c(rnorm(5000),rnorm(5000,2,3)) bin <- hexbin(x,y) # Show color control and overplotting of hexagons plot(bin$xbnd, bin$ybnd, type="n", main = "Bivariate mixture (10000)", asp=1) hexagons(bin, style= "lattice", border = gray(.1), pen = gray(.6), minarea = .1, maxarea = 1.5) ## How to treat 'singletons' specially: plot(bin$xbnd, bin$ybnd, type="n", main = "Bivariate mixture (10000)", asp=1) hexagons(bin, style= "nested.centroids", mincnt = 2)# not the single ones hexagons(bin, style= "centroids", maxcnt = 1, maxarea=0.04)# single points # And if we had all the information... if(require(gpclib)){ h1 <- chull(x[1:5000], y[1:5000]) h2 <- chull(x[5001:10000], y[5001:10000]) h2 <- h2+5000 h1 <- as(cbind(x[1:5000],y [1:5000])[h1, ], "gpc.poly") h2 <- as(cbind(x,y)[h2, ], "gpc.poly") plot(bin$xbnd, bin$ybnd, type="n", main = "Bivariate mixture (10000)", asp=1) plot(h1,poly.args = list(col ="#CCEBC5"),add = TRUE) plot(h2,poly.args = list(col ="#FBB4AE"),add = TRUE) plot(intersect(h1, h2), poly.args = list(col = 2), add = TRUE) hexagons(bin, style= "centroids", border = gray(.1), pen = gray(.6), minarea = .1, maxarea = 1.5) }