| pairs.panels {psych} | R Documentation |
Adapted from the help page for pairs, pairs.panels shows a scatter plot of matrices (SPLOM), with bivariate scatter plots below the diagonal, histograms on the diagonal, and the Pearson correlation above the diagonal. Useful for descriptive statistics of small data sets.
pairs.panels(x, y, smooth = TRUE, scale = FALSE, digits = 2, ...)
x |
a data.frame or matrix |
y |
an optional data.frame or matrix |
smooth |
TRUE draws loess smooths |
scale |
TRUE scales the correlation font by the size of the absolute correlation. |
digits |
the number of digits to show |
... |
other options for pairs |
Shamelessly adapted from the pairs help page. Uses panel.cor, panel.cor.scale, and panel.hist, all taken from the help pages for pairs.
a scatter plot matrix (SPLOM) is drawn in the graphic window. The lower off diagonal draws scatter plots, the diagonal histograms, the upper off diagonal reports the Pearson correlation (with pairwise deletion).
#pairs.panels(attitude) #see the graphics window
## The function is currently defined as
function (x, y, smooth = TRUE, scale = FALSE, digits = 2, ...)
{
if (smooth) {
if (scale) {
pairs(x, diag.panel = panel.hist, upper.panel = panel.cor.scale,
lower.panel = panel.smooth, ...)
}
else {
pairs(x, diag.panel = panel.hist, upper.panel = panel.cor,
lower.panel = panel.smooth, ...)
}
}
else {
if (scale) {
pairs(x, diag.panel = panel.hist, upper.panel = panel.cor.scale,
...)
}
else {
pairs(x, diag.panel = panel.hist, upper.panel = panel.cor,
...)
}
}
}
#
## The function is currently defined as
"panel.cor"
function(x, y, digits=2, prefix="", cex.cor)
{
usr <- par("usr"); on.exit(par(usr))
par(usr = c(0, 1, 0, 1))
r = (cor(x, y,use="pairwise"))
txt <- format(c(round(r,digits), 0.123456789), digits=digits)[1]
txt <- paste(prefix, txt, sep="")
if(missing(cex.cor)) cex <- 0.8/strwidth(txt)
text(0.5, 0.5, txt, cex = cex )
}
## The function is currently defined as
"panel.cor.scale"
function(x, y, digits=2, prefix="", cex.cor)
{
usr <- par("usr"); on.exit(par(usr))
par(usr = c(0, 1, 0, 1))
r = (cor(x, y,use="pairwise"))
txt <- format(c(r, 0.123456789), digits=digits)[1]
txt <- paste(prefix, txt, sep="")
if(missing(cex.cor)) cex <- 0.8/strwidth(txt)
text(0.5, 0.5, txt, cex = cex * abs(r))
}
"panel.hist"
function(x, ...)
{
usr <- par("usr"); on.exit(par(usr))
par(usr = c(usr[1:2], 0, 1.5) )
h <- hist(x, plot = FALSE)
breaks <- h$breaks; nB <- length(breaks)
y <- h$counts; y <- y/max(y)
rect(breaks[-nB], 0, breaks[-1], y, col="cyan", ...)
}