graphics (version 3.6.2)

plot.formula: Formula Notation for Scatterplots


Specify a scatterplot or add points, lines, or text via a formula.


# S3 method for formula
plot(formula, data = parent.frame(), …, subset,
             ylab = varnames[response], ask = dev.interactive())

# S3 method for formula points(formula, data = parent.frame(), …, subset)

# S3 method for formula lines(formula, data = parent.frame(), …, subset)

# S3 method for formula text(formula, data = parent.frame(), …, subset)



a formula, such as y ~ x.


a data.frame (or list) from which the variables in formula should be taken. A matrix is converted to a data frame.

Arguments to be passed to or from other methods. horizontal = TRUE is also accepted.


an optional vector specifying a subset of observations to be used in the fitting process.


the y label of the plot(s).


logical, see par.


These functions are invoked for their side effect of drawing on the active graphics device.


For the lines, points and text methods the formula should be of the form y ~ x or y ~ 1 with a left-hand side and a single term on the right-hand side. The plot method accepts other forms discussed later in this section.

Both the terms in the formula and the arguments are evaluated in data enclosed in parent.frame() if data is a list or a data frame. The terms of the formula and those arguments in that are of the same length as data are subjected to the subsetting specified in subset. A plot against the running index can be specified as plot(y ~ 1).

If the formula in the plot method contains more than one term on the right-hand side, a series of plots is produced of the response against each non-response term.

For the plot method the formula can be of the form ~ z + y + z: the variables specified on the right-hand side are collected into a data frame, subsetted if specified, and displayed by

Missing values are not considered in these methods, and in particular cases with missing values are not removed.

If y is an object (i.e., has a class attribute) then plot.formula looks for a plot method for that class first. Otherwise, the class of x will determine the type of the plot. For factors this will be a parallel boxplot, and argument horizontal = TRUE can be specified (see boxplot).

Note that some arguments will need to be protected from premature evaluation by enclosing them in quote: currently this is done automatically for main, sub and xlab. For example, it is needed for the panel.first and panel.last arguments passed to plot.default.

See Also

plot.default, points, lines, plot.factor.


Run this code
op <- par(mfrow = c(2,1))
plot(Ozone ~ Wind, data = airquality, pch = as.character(Month))
plot(Ozone ~ Wind, data = airquality, pch = as.character(Month),
     subset = Month != 7)

## text.formula() can be very natural:
wb <- within(warpbreaks, {
    time <- seq_along(breaks); W.T <- wool:tension })
plot(breaks ~ time, data = wb, type = "b")
text(breaks ~ time, data = wb, label = W.T, col = 1+as.integer(wool))
# }

Run the code above in your browser using DataLab