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