1d kernel density estimate.

1d kernel density estimate.

stat_density(mapping = NULL, data = NULL, geom = "area",
    position = "stack", adjust = 1, kernel = "gaussian",
    trim = FALSE, na.rm = FALSE, ...)
see density for details
kernel used for density estimation, see density for details
if TRUE, the default, densities are trimmed to the actual range of the data. If FALSE, they are extended by the default 3 bandwidths (as specified by the cut parameter to
If FALSE (the default), removes missing values with a warning. If TRUE silently removes missing values.
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 geometric object to use display the data
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.

  • data.frame with additional columns:
  • densitydensity estimate
  • countdensity * number of points - useful for stacked density plots
  • scaleddensity estimate, scaled to maximum of 1


[results=rd,stage=build]{ggplot2:::rd_aesthetics("stat", "density")} m <- ggplot(movies, aes(x = rating)) m + geom_density()

# Adjust parameters m + geom_density(kernel = "rectangular") m + geom_density(kernel = "biweight") m + geom_density(kernel = "epanechnikov") m + geom_density(adjust=1/5) # Very rough m + geom_density(adjust=5) # Very smooth

# Adjust aesthetics m + geom_density(aes(fill=factor(Drama)), size=2) # Scale so peaks have same height: m + geom_density(aes(fill=factor(Drama), y = ..scaled..), size=2)

m + geom_density(colour="darkgreen", size=2) m + geom_density(colour="darkgreen", size=2, fill=NA) m + geom_density(colour="darkgreen", size=2, fill="green")

# Change scales (m <- ggplot(movies, aes(x=votes)) + geom_density(trim = TRUE)) m + scale_x_log10() m + coord_trans(x="log10") m + scale_x_log10() + coord_trans(x="log10")

# Also useful with m + stat_bin()

# Make a volcano plot ggplot(diamonds, aes(x = price)) + stat_density(aes(ymax = ..density.., ymin = -..density..), fill = "grey50", colour = "grey50", geom = "ribbon", position = "identity") + facet_grid(. ~ cut) + coord_flip()

# Stacked density plots # If you want to create a stacked density plot, you need to use # the 'count' (density * n) variable instead of the default density

# Loses marginal densities qplot(rating, ..density.., data=movies, geom="density", fill=mpaa, position="stack") # Preserves marginal densities qplot(rating, ..count.., data=movies, geom="density", fill=mpaa, position="stack")

# You can use position="fill" to produce a conditional density estimate qplot(rating, ..count.., data=movies, geom="density", fill=mpaa, position="fill")

# Need to be careful with weighted data m <- ggplot(movies, aes(x=rating, weight=votes)) m + geom_histogram(aes(y = ..count..)) + geom_density(fill=NA)

m <- ggplot(movies, aes(x=rating, weight=votes/sum(votes))) m + geom_histogram(aes(y=..density..)) + geom_density(fill=NA, colour="black")

library(plyr) # to access round_any movies$decade <- round_any(movies$year, 10) m <- ggplot(movies, aes(x=rating, colour=decade, group=decade)) m + geom_density(fill=NA) m + geom_density(fill=NA) + aes(y = ..count..)

# Use qplot instead qplot(length, data=movies, geom="density", weight=rating) qplot(length, data=movies, geom="density", weight=rating/sum(rating))

stat_bin for the histogram

  • stat_density
Documentation reproduced from package ggplot2, version, License: GPL-2

Community examples

Looks like there are no examples yet.