If you go back to the ggplot book
, the grammar of graphics philosophy is heavily oriented toward layers. This naturally leads to an approach of beginning with the most basic and proceeding to the more specific.
library(ggplot2)
# adapted from documentation
# base object -- note not suitable for ALL geoms, such as geom_histogram()
p <- ggplot(mtcars, aes(wt, mpg))
# add a geom
p + geom_point()

# add a second geom
p + geom_point() + geom_line()

# add a theme
p + geom_point() + geom_line() + theme(
panel.background = element_rect(fill = NA),
panel.grid.major = element_line(colour = "grey50"),
panel.ontop = TRUE)

# add a title and lable axes
p + geom_point() + geom_line() + theme(
panel.background = element_rect(fill = NA),
panel.grid.major = element_line(colour = "grey50"),
panel.ontop = TRUE) + ggtitle("Illustrative Plot") + xlab("Miles per gallon") + ylab("Horsepower")

Created on 2020-01-06 by the reprex package (v0.3.0)