Make sure you first load the "tidyverse" package before running the example provided by @JackDavison. Besides you can load separately the three packages used by @JackDavison, which are https://tibble.tidyverse.org/, https://dplyr.tidyverse.org/, and https://ggplot2.tidyverse.org/.
Below, I add plot(s) from base R
# Load the tidyverse library
library(tidyverse)
# make up some data as none was provided
dat <- tibble(x = 1:20,
y1 = 1:20,
y2 = (1:20) + 5,
y3 = (1:20) + 10) %>%
mutate(across(y1:y3, jitter))
# plot
ggplot(dat, aes(x = x)) +
geom_line(aes(y = y1), color = "blue") +
geom_point(aes(y = y2), shape = 1) +
geom_line(aes(y = y3), color = "black")

# Using base R
datF <- data.frame( x = 1:20,
y1 = 1:20,
y2 = (1:20) + 5,
y3 = (1:20) + 10)
# Get the range for x-axis and y-axis
rangeX <- range(datF$x)
rangeY <- range( c(datF$y1, datF$y2, datF$y3) )
# Make the plot using using plot & points
plot(datF$x, datF$y1, type = "l", col = "blue",
xlim = c(rangeX[1], rangeX[2]),
ylim = c(rangeY[1], rangeY[2]), las = 2)
points(datF$x, datF$y2, type = "p", cex = 0.75)
points(datF$x, datF$y3, type = "l", col = "black")

# Make the plot using using plot & lines
rangeX <- range(datF$x)
rangeY <- range( c(datF$y1, datF$y2, datF$y3) )
# Make the plot
plot(datF$x, datF$y1, type = "l", col = "blue",
xlim = c(rangeX[1], rangeX[2]),
ylim = c(rangeY[1], rangeY[2]), las = 2)
lines(datF$x, datF$y2, type = "p", cex = 0.75)
lines(datF$x, datF$y3, type = "l", col = "black")
