\name{stat_function}
\alias{stat_function}
\title{Superimpose a function.}
\usage{
  stat_function(mapping = NULL, data = NULL, geom = "path",
    position = "identity", fun, n = 101, args = list(),
    ...)
}
\arguments{
  \item{fun}{function to use}

  \item{n}{number of points to interpolate along}

  \item{args}{list of additional arguments to pass to
  \code{fun}}

  \item{mapping}{The aesthetic mapping, usually constructed
  with \code{\link{aes}} or \code{\link{aes_string}}. Only
  needs to be set at the layer level if you are overriding
  the plot defaults.}

  \item{data}{A layer specific dataset - only needed if you
  want to override the plot defaults.}

  \item{geom}{The geometric object to use display the data}

  \item{position}{The position adjustment to use for
  overlappling points on this layer}

  \item{...}{other arguments passed on to
  \code{\link{layer}}. This can include aesthetics whose
  values you want to set, not map. See \code{\link{layer}}
  for more details.}
}
\value{
  a data.frame with additional columns: \item{x}{x's along
  a grid} \item{y}{value of function evaluated at
  corresponding x}
}
\description{
  Superimpose a function.
}
\section{Aesthetics}{
  \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("stat",
  "function")}
}
\examples{
x <- rnorm(100)
base <- qplot(x, geom = "density")
base + stat_function(fun = dnorm, colour = "red")
base + stat_function(fun = dnorm, colour = "red", arg = list(mean = 3))

# Plot functions without data
# Examples adapted from Kohske Takahashi

# Specify range of x-axis
qplot(c(0, 2), stat = "function", fun = exp, geom = "line")
ggplot(data.frame(x = c(0, 2)), aes(x)) + stat_function(fun = exp)
# Plot a normal curve
ggplot(data.frame(x = c(-5, 5)), aes(x)) + stat_function(fun = dnorm)
# With qplot
qplot(c(-5, 5), stat = "function", fun = dnorm, geom = "line")
# Or
qplot(c(-5, 5), geom = "blank") + stat_function(fun = dnorm)
# To specify a different mean or sd, use the args parameter to supply new values
ggplot(data.frame(x = c(-5, 5)), aes(x)) + stat_function(fun = dnorm, args = list(mean = 2, sd = .5))

# Two functions on the same plot
f <- ggplot(data.frame(x = c(0, 10)), aes(x))
f + stat_function(fun = sin, colour = "red") + stat_function(fun = cos, colour = "blue")

# Using a custom function
test <- function(x) {x ^ 2 + x + 20}
f + stat_function(fun = test)
}

