R: Skeleton Plot

skel.plot {dplR} | R Documentation

## Skeleton Plot

### Description

Automatically generates a skeleton plot of tree-ring data.

### Usage

    skel.plot(rw.vec, yr.vec = NULL, sname = "", filt.weight = 9,
              dat.out = FALSE, master = FALSE, plot = TRUE)

### Arguments

`rw.vec` | a `numeric` vector of a tree-ring chronology or series
`yr.vec` | optional `numeric` vector giving years for the tree-ring data
`sname` | an optional `character` string giving the ID for the data. The width of the string, often identical to the number of characters, must be less than 8.
`filt.weight` | filter length for the Hanning filter, defaults to 9
`dat.out` | `logical` flag indicating whether to return a `data.frame` containing the data.
`master` | `logical` flag indicating whether to make the plot with the segments inverted to ease pattern matching. If `TRUE` the segments will be plotted from the top down and the labels on the x axes will be on the bottom.
`plot` | `logical` flag indicating whether to make a plot.

### Details

This makes a skeleton plot – a plot that gives the relative growth for year `t` relative to years `t-1` and `t+1`. Note that this plot is a standard plot in dendrochronology and typically made by hand for visually cross-dating series. This type of plot might be confusing to those not accustomed to visual cross-dating. See references for more information. The implementation is based on Meko’s (2002) skeleton plotting approach.

The skeleton plot is made by calculating departures from high frequency growth for each year by comparing year `t` to the surrounding three years (`t-1`,`t`,`t+1`). Low frequency variation is removed using a `hanning` filter. Relative growth is scaled from one to ten but only values greater than three are plotted. This function’s primary effect is to create plot with absolute units that can be printed and compared to other plots. Here, anomalous growth is plotted on a 2mm grid and up to 120 years are plotted on a single row with a maximum of 7 rows (840 years). These plots are designed to be plotted on standard paper using an appropriate `device`, e.g., `postscript` with defaults or to `pdf` with plot width and height to accommodate a landscape plot, e.g., `width = 10`, `height = 7.5`, `paper = "USr"`. These plots are designed to be printable and cut into strips to align long series. Statistical cross-dating is possible if the data are output but more easily done using the functions `xskel.plot` and `xskel.ccf.plot`.

### Value

This function is invoked primarily for its side effect, which is to produce a plot. If `dat.out` is `TRUE` then a `data.frame` is returned with the years and height of the skeleton plot segments as columns.

### Author(s)

Andy Bunn. Patched and improved by Mikko Korpela.

### References

Stokes, M. A. and Smiley, T. L. (1968) An Introduction to Tree-Ring Dating. The University of Arizona Press. ISBN-13: 978-0-8165-1680-3.

Sheppard, P. R. (2002) Crossdating Tree Rings Using Skeleton Plotting. http://www.ltrr.arizona.edu/skeletonplot/introcrossdate.htm.

Meko, D. (2002) Tree-Ring MATLAB Toolbox. http://www.mathworks.com/matlabcentral/.

### See Also

`Devices`, `hanning`, `xskel.plot`, `xskel.ccf.plot`

### Examples

    library(utils)
    data(co021)
    x <- co021[,33]
    x.yrs <- time(co021)
    x.name <- colnames(co021)[33]
    ## On a raw ring width series - undated
    skel.plot(x)
    ## On a raw ring width series - dated with names
    skel.plot(x, yr.vec = x.yrs, sname = x.name, master = TRUE)
    ## Not run:
    library(grDevices)
    ## Try cross-dating
    y <- co021[, 11]
    y.yrs <- time(co021)
    y.name <- colnames(co021)[11]

    ## send to postscript - 3 pages total
    fname1 <- tempfile(fileext=".ps")
    print(fname1) # tempfile used for PS output
    postscript(fname1)
    ## "Master series" with correct calendar dates
    skel.plot(x, yr.vec = x.yrs, sname = x.name, master = TRUE)
    ## Undated series, try to align with last plot
    skel.plot(y)
    ## Here's the answer...
    skel.plot(y, yr.vec = y.yrs, sname = y.name)
    dev.off()

    unlink(fname1) # remove the PS file

    ## alternatively send to pdf
    fname2 <- tempfile(fileext=".pdf")
    print(fname2) # tempfile used for PDF output
    pdf(fname2, width = 10, height = 7.5, paper = "USr")
    skel.plot(x, yr.vec = x.yrs, sname = x.name, master = TRUE)
    skel.plot(y)
    skel.plot(y, yr.vec = y.yrs, sname = y.name)
    dev.off()

    unlink(fname2) # remove the PDF file

    ## End(Not run)

[Package dplR version 1.7.1 Index]