contour function
Given a matrix, and optionally the grid of X-axis and Y-axis values, it is possible to create a contour plot in R with the contour function.
# Data
x <- -10:10
y <- -10:10
z <- sqrt(outer(x ^ 2, y ^ 2, "+"))
contour(x, y, z)
# You can also type, the following
# but the axes will be between 0 and 1
contour(z)

Number of levels
The nlevels argument controls the number of contour levels to be drawn. The default value is 10.
# Data
x <- -10:10
y <- -10:10
z <- sqrt(outer(x ^ 2, y ^ 2, "+"))
contour(x, y, z,
nlevels = 20)

Contour lines
Note that you can change the line width and line style of the contours with lwd and lty, respectively, as well as the size for contour labels with labcex, change the labels with labels or remove them setting drawlabels = FALSE.
# Data
x <- -10:10
y <- -10:10
z <- sqrt(outer(x ^ 2, y ^ 2, "+"))
contour(x, y, z,
labcex = 1.2, labels = 1:10,
lwd = 2, lty = 1)

Color palette
You can change the color of the contour lines with col, passing a color or a color palette, such in the example below, which draws contours for the volcano data set.
# Color palette
cols <- hcl.colors(10, "YlOrRd")
contour(volcano,
col = cols)

Overlay contour over a scatter plot
If you want to overlay contour lines over a scatter plot you can use the kde2d function from MASS to calculate the kernel density estimate of the variables as shown in the example below. Recall to set add = TRUE inside contour.
# install.packages("MASS")
library(MASS)
# Data
x <- rnorm(500)
y <- rnorm(500)
z <- kde2d(x, y, n = 50)
plot(x, y, pch = 19)
contour(z, lwd = 2, add = TRUE,
col = hcl.colors(10, "Spectral"))

filled.contour function

A similar function to contour is filled.contour, which fills the areas between the contour lines. The function behaves almost the same as the function from the previous section.
filled.contour(volcano)

Number of levels
In this function you can also specify the number of levels with nlevels.
filled.contour(volcano,
nlevels = 10)

Color palette
The color palette can be set with color.palette or specifying a vector of colors with col.
filled.contour(volcano,
color.palette = terrain.colors)

Filled contour with lines
The plot.axes function can be used to add a contour over the filled contour plot, as shown in the following example.
filled.contour(volcano, plot.axes = {
axis(1)
axis(2)
contour(volcano, add = TRUE, lwd = 2)
}
)
See also