\HeaderA{gg2density}{Grob function: 2d density}{gg2density}
\keyword{hplot}{gg2density}
\begin{Description}\relax
Perform a 2D kernel density estimatation using \code{\LinkA{kde2d}{kde2d}} and
\end{Description}
\begin{Usage}
\begin{verbatim}gg2density(plot = .PLOT, aesthetics=list(), ..., data=plot$data)\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\code{plot}] the plot object to modify
\item[\code{aesthetics}] named list of aesthetic mappings, see details for more information
\item[\code{...}] other options, see details for more information
\item[\code{data}] data source, if not specified the plot default will be used
\end{ldescription}
\end{Arguments}
\begin{Details}\relax
This is another function useful for dealing with overplotting.

Aesthetic mappings that this grob function understands:

\Itemize{
\item x: x position (required)
\item y: y position (required)
}

These can be specified in the plot defaults (see \code{\LinkA{ggplot}{ggplot}}) or
in the \code{aesthetics} argument.  If you want to modify the position
of the points or any axis options, you will need to add a position scale to
the plot.  These functions start with \code{ps}, eg.
\code{\LinkA{pscontinuous}{pscontinuous}} or \code{\LinkA{pscategorical}{pscategorical}}

Other options:

\Itemize{
\item passed to \code{\LinkA{ggcontour}{ggcontour}}, see it for details
}
\end{Details}
\begin{Author}\relax
Hadley Wickham <h.wickham@gmail.com>
\end{Author}
\begin{SeeAlso}\relax
\code{\LinkA{ggcontour}{ggcontour}}, \code{\LinkA{gghexagon}{gghexagon}} for another way of dealing with over plotting
\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}m <- ggpoint(ggplot(movies, aesthetics=list(y=length, x=rating)))
dens <- MASS::kde2d(movies$rating, movies$length)
densdf <- data.frame(expand.grid(rating = dens$x, length = dens$y), z=as.vector(dens$z))
ggcontour(m, list(z=z), data=densdf)
gg2density(m)
# they don't look the same due to scaling effects on kde2d\end{ExampleCode}
\end{Examples}

