Base R provides several functions to add segments and arrows to the plots. In this guide we are going to use the following sample plot:
# Sample data
set.seed(132)
x <- seq(1, 10, by = 0.05)
y <- x ^ 2 + rnorm(x, sd = 10)
# Plotting function used in the examples below
splot <- function(x, y) {
plot(x, y, pch = ifelse(x > 8, 23, ifelse(y < 0, 24, 21)),
bg = ifelse(x > 8, "deepskyblue", ifelse(y < 0 , "orange", "lightgreen")))
}
abline
function
The abline
function allows drawing lines, such as horizontal lines (h
argument), vertical lines (v
argument), lines based on a intersection and a slope (a
and b
arguments) or for plotting a regression line.
Horizontal line
The h
argument allows you to set the Y-axis value where to draw a horizontal line.
splot(x, y) # Sample function
# Horizontal line at Y = 0
abline(h = 0)
Vertical line
The v
argument allows you to set the X-axis values where to draw vertical lines.
splot(x, y)
# Vertical line at X = 8
abline(v = 8)
Horizontal and vertical line at the same time
You can also add vertical and horizontal lines at the same time specifying both arguments.
splot(x, y)
# Horizontal line at Y = 1 and vertical at X = 8
abline(h = 1, v = 8)
Intercept and slope
In addition to horizontal or vertical lines, you can also specify an intercept with the argument a
and the slope of the line with the argument b
.
splot(x, y)
abline(a = -15, # Intercept
b = 10) # Slope
Regression line
The abline
function also allows drawing linear regression lines from a model.
splot(x, y)
abline(lm(y ~ x)) # Linear regression
Line customization
The same customization of lines in base R can be applied to this and the other functions of this guide.
splot(x, y)
abline(h = 0, v = 8,
col = c("red", "green"),
lwd = 2,
lty = 2:3)
segments
function
This function is very similar to abline
, but you can specify the starting and end points of the lines with x0
, x1
, y0
and y1
arguments.
splot(x, y)
segments(x0 = 1,
x1 = 3,
y0 = 0,
y1 = 0,
lwd = 2,
col = "red")
segments(x0 = 8,
x1 = 8,
y0 = 40,
y1 = 100,
lwd = 2,
col = "orange")
arrows
function
You can set the arrows the same way as segments, specifying the start and end of the arrow on each axis.
splot(x, y)
arrows(x0 = 3,
x1 = 7,
y0 = 40,
y1 = 90)
In addition to modifying the color, width or line type, the arrows
function also allows customizing the length and the angle of the arrowhead.
splot(x, y)
arrows(x0 = 3, x1 = 7,
y0 = 40, y1 = 90,
length = 0.1,
angle = 20)
See also