smoothScatter {graphics} | R Documentation

## Scatterplots with Smoothed Densities Color Representation

### Description

`smoothScatter` produces a smoothed color density representation of a scatterplot, obtained through a (2D) kernel density estimate.

### 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` and `y` arguments provide the x and y coordinates for the plot. Any reasonable way of defining the coordinates is acceptable. See the function `xy.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` in `bkde2D()`.
`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 function `bkde2D`.
`colramp` | function accepting an integer `n` as an argument and returning `n` 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, choose `nrpoints = Inf`.
`ret.selection` | `logical` indicating to return the ordered indices of “low density” points if `nrpoints > 0`.
`pch, cex, col` | arguments passed to `points`, when `nrpoints > 0`: point symbol, character expansion factor and color, see also `par`.
`transformation` | function mapping the density scale to the color scale.
`postPlotHook` | either `NULL` or a function which will be called (with no arguments) after `image`.
`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` or `useRaster=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.

### Author(s)

Florian Hahne at FHCRC, originally

### 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

    ## 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)

[Package graphics version 3.3.0 Index]