Add a smoothed conditional mean.


geom_smooth(mapping = NULL, data = NULL, stat = "smooth", position = "identity",


The aesthetic mapping, usually constructed with aes or aes_string. Only needs to be set at the layer level if you are overriding the plot defaults.
A layer specific dataset - only needed if you want to override the plot defaults.
The statistical transformation to use on the data for this layer.
The position adjustment to use for overlappling points on this layer
other arguments passed on to layer. This can include aesthetics whose values you want to set, not map. See layer for more details.


Add a smoothed conditional mean.


geom_smooth understands the following aesthetics (required aesthetics are in bold):

  • x
  • y
  • alpha
  • colour
  • fill
  • linetype
  • size
  • weight


# See stat_smooth for examples of using built in model fitting # if you need some more flexible, this example shows you how to # plot the fits from any model of your choosing qplot(wt, mpg, data=mtcars, colour=factor(cyl))

model <- lm(mpg ~ wt + factor(cyl), data=mtcars) grid <- with(mtcars, expand.grid( wt = seq(min(wt), max(wt), length = 20), cyl = levels(factor(cyl)) )) grid$mpg <- stats::predict(model, newdata=grid) qplot(wt, mpg, data=mtcars, colour=factor(cyl)) + geom_line(data=grid)

# or with standard errors err <- stats::predict(model, newdata=grid, se = TRUE) grid$ucl <- err$fit + 1.96 * err$ grid$lcl <- err$fit - 1.96 * err$ qplot(wt, mpg, data=mtcars, colour=factor(cyl)) + geom_smooth(aes(ymin = lcl, ymax = ucl), data=grid, stat="identity")

See also

The default stat for this geom is stat_smooth see that documentation for more options to control the underlying statistical transformation.