# Analyses

## Histogram

`AlgebraOfGraphics.histogram`

โ Function`histogram(; bins=automatic, weights=automatic, normalization=:none)`

Compute a histogram. `bins`

can be an `Int`

to create that number of equal-width bins over the range of `values`

. Alternatively, it can be a sorted iterable of bin edges. The histogram can be normalized by setting `normalization`

. Possible values are:

`:pdf`

: Normalize by sum of weights and bin sizes. Resulting histogram has norm 1 and represents a PDF.`:density`

: Normalize by bin sizes only. Resulting histogram represents count density of input and does not have norm 1.`:probability`

: Normalize by sum of weights only. Resulting histogram represents the fraction of probability mass for each bin and does not have norm 1.`:none`

: Do not normalize.

Weighted data is supported via the keyword `weights`

.

Normalizations are computed withing groups. For example, in the case of `normalization=:pdf`

, sum of weights *within each group* will be equal to `1`

.

```
using AlgebraOfGraphics, CairoMakie
set_aog_theme!()
df = (x=randn(1000), y=randn(1000), z=rand(["a", "b", "c"], 1000))
specs = data(df) * mapping(:x, layout=:z) * histogram(bins=range(-2, 2, length=15))
draw(specs)
```

```
specs = data(df) * mapping(:x, dodge=:z, color=:z) * histogram(bins=range(-2, 2, length=15))
draw(specs)
```

```
specs = data(df) * mapping(:x, stack=:z, color=:z) * histogram(bins=range(-2, 2, length=15))
draw(specs)
```

`data(df) * mapping(:x, :y, layout=:z) * histogram(bins=15) |> draw`

## Density

`AlgebraOfGraphics.density`

โ Function`density(; datalimits, npoints, kernel, bandwidth)`

Fit a kernel density estimation of `data`

. Here, `datalimits`

specifies the range for which the density should be calculated, `npoints`

is the number of points used by Makie to draw the line and `kernel`

and `bandwidth`

are forwarded to `KernelDensity.kde`

.

```
df = (x=randn(5000), y=randn(5000), z=rand(["a", "b", "c", "d"], 5000))
datalimits = ((-2.5, 2.5),)
xz = data(df) * mapping(:x, layout=:z) * AlgebraOfGraphics.density(; datalimits)
axis = (; ylabel="")
draw(xz; axis)
```

`data(df) * mapping(:x, :y, layout=:z) * AlgebraOfGraphics.density(npoints=50) |> draw`