How to Add a Line to a Plot With the Lines() Function in R

Jinku Hu Feb 02, 2024
  1. Use the lines() Function to Add a Line to a Plot in R
  2. Use points to Add Points to a Plot in R
  3. plot and lines Function Call Order Affects the Scales of Plot
How to Add a Line to a Plot With the Lines() Function in R

This article will introduce how to add a line to a plot with the lines() function in R.

Use the lines() Function to Add a Line to a Plot in R

The lines() function is part of the R graphics package, and it’s used to add lines to the plot. At first, the plot function should be called to construct a plot where there is a mapping of variables specified by the first two arguments. Note that the second argument, which denotes the y-axis coordinates, is optional. Once the plot is drawn, we can call the lines() function and pass the coordinate vectors as needed to add lines to the plot. The plot function is not required to draw a line graph for the lines() function to work.

library(stats)
library(babynames)
library(dplyr)

plot(cars$speed, cars$dist, type = "l", col = "red",
     main = "Title of the Plot",
     xlab = "Speed (mph)",
     ylab = "Stopping Distance (Feet)")

lines(cars$speed, cars$dist/4 , col = "green")

legend("topleft", c("line 1", "line 2"),
       lty = c(1,1),
       col = c("red", "green"))

add line to plot

Use points to Add Points to a Plot in R

Similar to the lines() function, graphics package provides the points() function to draw points to the plot. The following example demonstrates the scenario where two lines and point mappings are made on the same plot. Notice, though, the original line graph is drawn with the plot function.

library(stats)
library(babynames)
library(dplyr)

plot(cars$speed, cars$dist, type = "l", col = "red",
     main = "Title of the Plot",
     xlab = "Speed (mph)",
     ylab = "Stopping Distance (Feet)")
points(cars$speed, cars$dist, col = "blue" )

lines(cars$speed, cars$dist/4 , col = "green")
points(cars$speed, cars$dist/4 , col = "black")

legend("topleft", c("line 1", "line 2"),
       lty = c(1,1),
       col = c("red", "green"))

add points to line plot

plot and lines Function Call Order Affects the Scales of Plot

Sometimes, the data mapped with the first function call has scales that are not enough for the following mapping. The next code snippet shows how one of the lines is almost out of bounds in the plot.

library(stats)
library(babynames)
library(dplyr)

dat <- babynames %>%
  filter(name %in% c("Alice")) %>% filter(sex=="F")
dat2 <- babynames %>%
  filter(name %in% c("Mary")) %>% filter(sex=="F")

plot(dat$year, dat$n, type = "l", col = "blue",
     main = "Women born with different names",
     xlab = "Year",
     ylab = "Number of babies born")
lines(dat2$year, dat2$n, col = "red")

plot and lines functions

Note that the previous issue can be solved with manual reordering of the lines, as shown in the following example. Although, more complex scripts may need to construct conditional statements and dynamic checking for the maximum values of y-axis data.

library(stats)
library(babynames)
library(dplyr)

dat <- babynames %>%
  filter(name %in% c("Alice")) %>% filter(sex=="F")
dat2 <- babynames %>%
  filter(name %in% c("Mary")) %>% filter(sex=="F")
dat3 <- babynames %>%
  filter(name %in% c("Mae")) %>% filter(sex=="F")

plot(dat2$year, dat2$n, type = "l", col = "blue",
     main = "Women born with different names",
     xlab = "Year",
     ylab = "Number of babies born")
lines(dat$year, dat$n, col = "red")
lines(dat3$year, dat3$n, col = "orange")

legend("topright", c("Mary", "Alice", "Mae"),
       lty = c(1,1,1),
       col = c("blue", "red", "orange"))

reorder plot and lines functions

Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Related Article - R Plot