| panel.lmlineq {latticeExtra} | R Documentation |
This is an extension of the panel functions panel.abline and
panel.lmline to also draw the equation of a line.
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, ...)
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, respectively.
The first argument (a) can also be a model object produced by
lm.
See panel.abline for more details.
|
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) = above right, c(1,0) = above left,
c(0,1) = below right, c(1,1) = below left;
offset does not apply when using adj.
|
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 if you change the device aspect ratio after plotting.
|
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 extracts the R^2 statistic from it.
The R^2 value is separated from the equation by sep, and
also sep.end is added to the end. For example:
panel.ablineq(lm(y ~ x), r.squared = TRUE, sep = " (", sep.end
= ")").
|
..., 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 the equation only, and col.line applies to line only.
|
reference |
whether to draw the line in a "reference line" style, like that used for grid lines. |
The equation is constructed as an expression using plotmath.
Felix Andrews felix@nfrac.org
panel.abline,
panel.text,
lm,
plotmath
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(),
key = simpleKey(c("intercept", "no intercept"),
points = FALSE, lines = TRUE))