smoothScatter
Scatterplots with Smoothed Densities Color Representation
smoothScatter
produces a smoothed color density
representation of a scatterplot, obtained through a (2D) kernel
density estimate.
- Keywords
- hplot
Usage
smoothScatter(x, y = NULL, nbin = 128, bandwidth,
colramp = colorRampPalette(c("white", blues9)),
nrpoints = 100, ret.selection = FALSE,
pch = ".", cex = 1, col = "black",
transformation = function(x) x^.25,
postPlotHook = box,
xlab = NULL, ylab = NULL, xlim, ylim,
xaxs = par("xaxs"), yaxs = par("yaxs"), ...)
Arguments
- x, y
the
x
andy
arguments provide the x and y coordinates for the plot. Any reasonable way of defining the coordinates is acceptable. See the functionxy.coords
for details. If supplied separately, they must be of the same length.- nbin
numeric vector of length one (for both directions) or two (for x and y separately) specifying the number of equally spaced grid points for the density estimation; directly used as
gridsize
inbkde2D()
.- bandwidth
numeric vector (length 1 or 2) of smoothing bandwidth(s). If missing, a more or less useful default is used.
bandwidth
is subsequently passed to functionbkde2D
.- colramp
function accepting an integer
n
as an argument and returningn
colors.- nrpoints
number of points to be superimposed on the density image. The first
nrpoints
points from those areas of lowest regional densities will be plotted. Adding points to the plot allows for the identification of outliers. If all points are to be plotted, choosenrpoints = Inf
.- ret.selection
logical
indicating to return the ordered indices of “low density” points ifnrpoints > 0
.- pch, cex, col
arguments passed to
points
, whennrpoints > 0
: point symbol, character expansion factor and color, see alsopar
.- transformation
function mapping the density scale to the color scale.
- postPlotHook
either
NULL
or a function which will be called (with no arguments) afterimage
.- xlab, ylab
character strings to be used as axis labels, passed to
image
.- xlim, ylim
numeric vectors of length 2 specifying axis limits.
- xaxs, yaxs, …
further arguments passed to
image
, e.g.,add=TRUE
oruseRaster=TRUE
.
Details
smoothScatter
produces a smoothed version of a scatter plot.
Two dimensional (kernel density) smoothing is performed by
bkde2D
from package KernSmooth.
See the examples for how to use this function together with
pairs
.
Value
If ret.selection
is true, a vector of integers of length
nrpoints
(or smaller, if there are less finite points inside
xlim
and ylim
) with the indices of the low-density
points drawn, ordered with lowest density first.
See Also
bkde2D
from package KernSmooth;
densCols
which uses the same smoothing computations and
blues9
in package grDevices.
scatter.smooth
adds a loess
regression smoother to a scatter plot.
Examples
library(graphics)
# NOT RUN {
## A largish data set
n <- 10000
x1 <- matrix(rnorm(n), ncol = 2)
x2 <- matrix(rnorm(n, mean = 3, sd = 1.5), ncol = 2)
x <- rbind(x1, x2)
oldpar <- par(mfrow = c(2, 2), mar=.1+c(3,3,1,1), mgp = c(1.5, 0.5, 0))
smoothScatter(x, nrpoints = 0)
smoothScatter(x)
## a different color scheme:
Lab.palette <- colorRampPalette(c("blue", "orange", "red"), space = "Lab")
i.s <- smoothScatter(x, colramp = Lab.palette,
## pch=NA: do not draw them
nrpoints = 250, ret.selection=TRUE)
## label the 20 very lowest-density points,the "outliers" (with obs.number):
i.20 <- i.s[1:20]
text(x[i.20,], labels = i.20, cex= 0.75)
## somewhat similar, using identical smoothing computations,
## but considerably *less* efficient for really large data:
plot(x, col = densCols(x), pch = 20)
## use with pairs:
par(mfrow = c(1, 1))
y <- matrix(rnorm(40000), ncol = 4) + 3*rnorm(10000)
y[, c(2,4)] <- -y[, c(2,4)]
pairs(y, panel = function(...) smoothScatter(..., nrpoints = 0, add = TRUE),
gap = 0.2)
par(oldpar)
# }