class plotnine.stats.stat_density(mapping: Aes | None = None, data: DataLike | None = None, **kwargs: Any)[source]

Compute density estimate


stat_density(mapping=None, data=None, geom='density', position='stack',
             na_rm=False, gridsize=None, n=1024, trim=False, bw='nrd0',
             kernel='gaussian', adjust=1, clip=(-inf, inf), cut=3, **kwargs)

Only the mapping and data can be positional, the rest must be keyword arguments. **kwargs can be aesthetics (or parameters) used by the geom.

mappingaes, optional

Aesthetic mappings created with aes(). If specified and inherit.aes=True, it is combined with the default mapping for the plot. You must supply mapping if there is no plot mapping.


Default value




The bold aesthetics are required.

Options for computed aesthetics

'density'   # density estimate

'count'     # density * number of points,
            # useful for stacked density plots

'scaled'    # density estimate, scaled to maximum of 1

'n'         # Number of observations at a position
datadataframe, optional

The data to be displayed in this layer. If None, the data from from the ggplot() call is used. If specified, it overrides the data from the ggplot() call.

geomstr or geom, optional (default: geom_density)

The statistical transformation to use on the data for this layer. If it is a string, it must be the registered and known to Plotnine.

positionstr or position, optional (default: position_stack)

Position adjustment. If it is a string, it must be registered and known to Plotnine.

na_rmbool, optional (default: False)

If False, removes missing values with a warning. If True silently removes missing values.

kernelstr, optional (default: 'gaussian')

Kernel used for density estimation. One of:

adjustfloat, optional (default: 1)

An adjustment factor for the bw. Bandwidth becomes bw * adjust. Adjustment of the bandwidth.

trimbool, optional (default: False)

This parameter only matters if you are displaying multiple densities in one plot. If False, the default, each density is computed on the full range of the data. If True, each density is computed over the range of that group; this typically means the estimated x values will not line-up, and hence you won't be able to stack density values.

nint, optional(default: 1024)

Number of equally spaced points at which the density is to be estimated. For efficient computation, it should be a power of two.

gridsizeint, optional (default: None)

If gridsize is None, max(len(x), 50) is used.

bwstr or float, optional (default: 'nrd0')

The bandwidth to use, If a float is given, it is the bandwidth. The str choices are:


nrd0 is a port of stats::bw.nrd0 in R; it is eqiuvalent to silverman when there is more than 1 value in a group.

cutfloat, optional (default: 3)

Defines the length of the grid past the lowest and highest values of x so that the kernel goes to zero. The end points are -/+ cut*bw*{min(x) or max(x)}.

cliptuple, optional (default: (-np.inf, numpy.inf))

Values in x that are outside of the range given by clip are dropped. The number of values in x is then shortened.