Easiest

# https://forestgeo.github.io/fgeo.map/
library(fgeo.map)

# Load your own elevation data
elevation <- CTFSElev_mpala

# You can use the elevation data in the elevation list directly
str(elevation)
#> List of 4
#>  $ col :'data.frame':    48581 obs. of  3 variables:
#>   ..$ x   : num [1:48581] 0 0 0 0 0 0 0 0 0 0 ...
#>   ..$ y   : num [1:48581] 0 5 10 15 20 25 30 35 40 45 ...
#>   ..$ elev: num [1:48581] 1791 1791 1791 1791 1791 ...
#>  $ xdim: num 2400
#>  $ ydim: num 500
#>  $ mat : num [1:101, 1:481] 1791 1791 1791 1791 1791 ...
map_elev(elevation)

# Also, you can extract the elevation dataframe and use that
elev <- elevation$col
map_elev(elev)

# You have a number of options you can tweak
map_elev(elev,
  # Or choose colors by code from http://bit.ly/2rJgQba
  low = "grey", high = "black", 
  # How many lines, and how thick
  bins = 100, contour_size = 0.5,
  # Hide elevation numbers from inside the plot
  label_elev = FALSE, 
  # Keep the "level" legend
  hide_legend_color = FALSE
)

More flexible

# http://ggplot2.tidyverse.org/reference/
library(ggplot2)

ggplot(elev, aes(x = x, y = y, z = elev)) +
  geom_raster(aes(fill = elev)) +
  geom_contour(color = "white", bins = 100) +
  scale_fill_gradient(low = "grey", high = "black") +
  coord_equal() +
  theme_bw()