How to define custom line types with R?
There are already six default line types defined in R; but how can one create a new, custom line type? It’s quite easy to do this in Python… and just as easy to do in R!
1 Default line types in R
The six default line types available in R can be viewed in Figure 1.
library(poliscidata) lineType()

They can be used either by their index (0
to 6
) or their name ("blank"
, "solid"
, …), as illustrated on Figure 2. Note how the argument lty
is specified in the functions plot()
and lines()
.
x <- seq(from = 0, to = 4, by = 0.1) ## Plot two curves: plot(x = x, y = I(x^2), type = "l", lty = 3, lwd = 2, col = "red", xlab = NA, ylab = NA) lines(x, exp(x), type = "l", lwd = 2, lty = "dotdash", col = "blue") ## Add legend: legend("topleft", lty = c(3, 4), col = c("red", "blue"), lwd = 2, legend = c("x^2", "exp(x)"))

2 Defining custom line types
Directly from the help page of the function par()
:
‘lty’ The line type. Line types can either be specified as an integer (0=blank, 1=solid (default), 2=dashed, 3=dotted, 4=dotdash, 5=longdash, 6=twodash) or as one of the character strings ‘"blank"’, ‘"solid"’, ‘"dashed"’, ‘"dotted"’, ‘"dotdash"’, ‘"longdash"’, or ‘"twodash"’, where ‘"blank"’ uses ‘invisible lines’ (i.e., does not draw them). Alternatively, a string of up to 8 characters (from ‘c(1:9, "A":"F")’) may be given, giving the length of line segments which are alternatively drawn and skipped.
Here, the last paragraph is precisely what we need to define more line types: we just need to indicate a sequence of hexadecimal characters giving (alternatively) the length of the segments and the blanks separating them.

We use those new examples to update Figure 2:
x <- seq(from = 0, to = 4, by = 0.1) ## Plot two curves: plot(x = x, y = I(x^2), type = "l", lty = "3D", lwd = 2, col = "red", xlab = NA, ylab = NA) lines(x, exp(x), type = "l", lwd = 2, lty = "159D", col = "blue") ## Add legend: legend("topleft", lty = c("3D", "159D"), col = c("red", "blue"), lwd = 2, legend = c("x^2", "exp(x)"))
