A matrix of scatterplots is produced.
1 2 3 4 5 6 7 8 9 10 11 12 13 14  pairs(x, ...)
## S3 method for class 'formula'
pairs(formula, data = NULL, ..., subset,
na.action = stats::na.pass)
## Default S3 method:
pairs(x, labels, panel = points, ...,
horInd = 1:nc, verInd = 1:nc,
lower.panel = panel, upper.panel = panel,
diag.panel = NULL, text.panel = textPanel,
label.pos = 0.5 + has.diag/3, line.main = 3,
cex.labels = NULL, font.labels = 1,
row1attop = TRUE, gap = 1, log = "")

x 
the coordinates of points given as numeric columns of a
matrix or data frame. Logical and factor columns are converted to
numeric in the same way that 
formula 
a formula, such as 
data 
a data.frame (or list) from which the variables in

subset 
an optional vector specifying a subset of observations to be used for plotting. 
na.action 
a function which indicates what should happen
when the data contain 
labels 
the names of the variables. 
panel 

... 
arguments to be passed to or from methods. Also, graphical parameters can be given as can arguments to

horInd, verInd 
The (numerical) indices of the variables to be plotted on the horizontal and vertical axes respectively. 
lower.panel, upper.panel 
separate panel functions (or

diag.panel 
optional 
text.panel 
optional 
label.pos 

line.main 
if 
cex.labels, font.labels 
graphics parameters for the text panel. 
row1attop 
logical. Should the layout be matrixlike with row 1 at the top, or graphlike with row 1 at the bottom? 
gap 
distance between subplots, in margin lines. 
log 
a character string indicating if logarithmic axes are to be
used: see 
The ijth scatterplot contains x[,i]
plotted against
x[,j]
. The scatterplot can be customised by setting panel
functions to appear as something completely different. The
offdiagonal panel functions are passed the appropriate columns of
x
as x
and y
: the diagonal panel function (if
any) is passed a single column, and the text.panel
function is
passed a single (x, y)
location and the column name.
Setting some of these panel functions to NULL
is
equivalent to not drawing anything there.
The graphical parameters pch
and col
can be used
to specify a vector of plotting symbols and colors to be used in the
plots.
The graphical parameter oma
will be set by
pairs.default
unless supplied as an argument.
A panel function should not attempt to start a new plot, but just plot
within a given coordinate system: thus plot
and boxplot
are not panel functions.
By default, missing values are passed to the panel functions and will
often be ignored within a panel. However, for the formula method and
na.action = na.omit
, all cases which contain a missing values for
any of the variables are omitted completely (including when the scales
are selected).
Arguments horInd
and verInd
were introduced in R
3.2.0. If given the same value they can be used to select or reorder
variables: with different ranges of consecutive values they can be
used to plot rectangular windows of a full pairs plot; in the latter
case â€˜diagonalâ€™ refers to the diagonal of the full plot.
Enhancements for R 1.0.0 contributed by Dr. Jens OehlschlaegelAkiyoshi and Rcore members.
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42  pairs(iris[1:4], main = "Anderson's Iris Data  3 species",
pch = 21, bg = c("red", "green3", "blue")[unclass(iris$Species)])
## formula method
pairs(~ Fertility + Education + Catholic, data = swiss,
subset = Education < 20, main = "Swiss data, Education < 20")
pairs(USJudgeRatings)
## show only lower triangle (and suppress labeling for whatever reason):
pairs(USJudgeRatings, text.panel = NULL, upper.panel = NULL)
## put histograms on the diagonal
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", ...)
}
pairs(USJudgeRatings[1:5], panel = panel.smooth,
cex = 1.5, pch = 24, bg = "light blue",
diag.panel = panel.hist, cex.labels = 2, font.labels = 2)
## put (absolute) correlations on the upper panels,
## with size proportional to the correlations.
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 < abs(cor(x, y))
txt < format(c(r, 0.123456789), digits = digits)[1]
txt < paste0(prefix, txt)
if(missing(cex.cor)) cex.cor < 0.8/strwidth(txt)
text(0.5, 0.5, txt, cex = cex.cor * r)
}
pairs(USJudgeRatings, lower.panel = panel.smooth, upper.panel = panel.cor)
pairs(iris[5], log = "xy") # plot all variables on log scale
pairs(iris, log = 1:4, # log the first four
main = "Lengths and Widths in [log]", line.main=1.5, oma=c(2,2,3,2))

Questions? Problems? Suggestions? Tweet to @rdrrHQ or email at ian@mutexlabs.com.
Please suggest features or report bugs with the GitHub issue tracker.
All documentation is copyright its authors; we didn't write any of that.