latticeExtra (version 0.6-9)

panel.lmlineq: Draw a line with a label, by default its equation

Description

This is an extension of the panel functions panel.abline and panel.lmline to also draw a label on the line. The default label is the line equation, and optionally the R squared value of its fit to the data points.

Usage

panel.ablineq(a = NULL, b = 0,
              h = NULL, v = NULL,
              reg = NULL, coef = NULL,
              pos = if (rotate) 1 else NULL,
              offset = 0.5, adj = NULL,
              at = 0.5, x, y,
              rotate = FALSE, srt = 0,
              label = NULL,
              varNames = alist(y = y, x = x),
              varStyle = "italic",
              fontfamily = "serif",
              digits = 3,
              r.squared = FALSE, sep = ", ", sep.end = "",
              col, col.text, col.line,
              ..., reference = FALSE)

panel.lmlineq(x, y, ...)

Arguments

a, b, h, v, reg, coef
specification of the line. The simplest usage is to give a and b to describe the line y = a + b x. Horizontal or vertical lines can be specified as arguments h or v, respecti
pos, offset, adj, fontfamily
passed on to panel.text. For pos: 1 = below, 2 = left, 3 = above, 4 = right, and the offset (in character widths) is applied. For adj: c(0,0) = a
at
position of the equation as a fractional distance along the line. This should be in the range 0 to 1. When a vertical line is drawn, this gives the vertical position of the equation.
x, y
position of the equation in native units. If given, this over-rides at. For panel.lmlineq this is the data, passed on as lm(y ~ x).
rotate, srt
set rotate = TRUE to align the equation with the line. This will over-ride srt, which otherwise gives the rotation angle. Note that the calculated angle depends on the current device size; this will be wrong i
label
the text to draw along with the line. If specified, this will be used instead of an equation.
varNames
names to display for x and/or y. This should be a list like list(y = "Q", x = "X") or, for mathematical symbols, alist(y = (alpha + beta), x = sqrt(x[t])).
varStyle
the name of a plotmath function to wrap around the equation expression, or NULL. E.g. "bolditalic", "displaystyle".
digits
number of decimal places to show for coefficients in equation.
r.squared, sep, sep.end
the $R^2$ statistic to display along with the equation of a line. This can be given directly as a number, or TRUE, in which case the function expects a model object (typically lm) and
..., col, col.text, col.line
passed on to panel.abline and panel.text. Note that col applies to both text and line; col.text applies to t
reference
whether to draw the line in a "reference line" style, like that used for grid lines.

Details

The equation is constructed as an expression using plotmath.

See Also

panel.abline, panel.text, lm, plotmath

Examples

Run this code
set.seed(0)
xsim <- rnorm(50, mean = 3)
ysim <- (0 + 2 * xsim) * (1 + rnorm(50, sd = 0.3))

## basic use as a panel function
xyplot(ysim ~ xsim, panel = function(x, y, ...) {
  panel.xyplot(x, y, ...)
  panel.ablineq(a = 0, b = 2, adj = c(0,1))
  panel.lmlineq(x, y, adj = c(1,0), lty = 2,
                col.line = "grey", digits = 1)
})

## using layers:
xyplot(ysim^2 ~ xsim) +
  layer(panel.ablineq(lm(y ~ x, subset = x <= 3),
    varNames = alist(y = y^2, x = x[x <= 3]), pos = 4))

## rotated equation (depends on device aspect at plotting time)
xyplot(ysim ~ xsim) +
  layer(panel.ablineq(lm(y ~ x), rotate = TRUE, at = 0.8))

## horizontal and vertical lines
xyplot(ysim ~ xsim) +
  layer(panel.ablineq(v = 3, pos = 4, at = 0.1, lty = 2,
                      label = "3.0 (critical value)")) +
  layer(panel.ablineq(h = mean(ysim), pos = 3, at = 0.15, lty = 2,
                      varNames = alist(y = plain(mean)(y))))

## using layer styles, r.squared
xyplot(ysim ~ xsim) +
  layer(panel.ablineq(lm(y ~ x), r.sq = TRUE,
                      at = 0.4, adj=0:1), style = 1) +
  layer(panel.ablineq(lm(y ~ x + 0), r.sq = TRUE,
                      at = 0.6, adj=0:1), style = 2)

## alternative placement of equations
xyplot(ysim ~ xsim) +
  layer(panel.ablineq(lm(y ~ x), r.sq = TRUE, rot = TRUE,
                      at = 0.8, pos = 3), style = 1) +
  layer(panel.ablineq(lm(y ~ x + 0), r.sq = TRUE, rot = TRUE,
                      at = 0.8, pos = 1), style = 2)

update(trellis.last.object(),
  auto.key = list(text = c("intercept", "no intercept"),
                  points = FALSE, lines = TRUE))

Run the code above in your browser using DataLab