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)

formula

a `formula`

, such as `y ~ x`

.

data

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.

subset

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

ylab

the y label of the plot(s).

ask

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
`plot.data.frame`

.

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`

.

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) par(op) ## 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))