boxplot

boxplot(x, y; kwargs...)

Draw a Tukey style boxplot. The boxplot has 3 components:

  • a crossbar spanning the interquartile (IQR) range with a midline marking the median

  • an errorbar whose whiskers span range * iqr

  • points marking outliers, that is, data outside the whiskers

Arguments

  • x: positions of the categories

  • y: variables within the boxes

Plot type

The plot type alias for the boxplot function is BoxPlot.

Attributes

color = @inherit patchcolorNo docs available.

colormap = @inherit colormapNo docs available.

colorrange = automaticNo docs available.

colorscale = identityNo docs available.

cycle = [:color => :patchcolor]No docs available.

dodge = automatic — Vector of Integer (length of data) of grouping variable to create multiple side-by-side boxes at the same x position.

dodge_gap = 0.03 — Spacing between dodged boxes.

gap = 0.2 — Shrinking factor, width -> width * (1 - gap).

inspectable = @inherit inspectableNo docs available.

marker = @inherit markerNo docs available.

markersize = @inherit markersizeNo docs available.

mediancolor = @inherit linecolorNo docs available.

medianlinewidth = @inherit linewidthNo docs available.

n_dodge = automaticNo docs available.

notchwidth = 0.5 — Multiplier of width for narrowest width of notch.

orientation = :vertical — Orientation of box (:vertical or :horizontal).

outliercolor = automaticNo docs available.

outlierstrokecolor = @inherit markerstrokecolorNo docs available.

outlierstrokewidth = @inherit markerstrokewidthNo docs available.

range = 1.5 — Multiple of IQR controlling whisker length.

show_median = true — Show median as midline.

show_notch = false — Draw the notch.

show_outliers = true — Show outliers as points.

strokecolor = @inherit patchstrokecolorNo docs available.

strokewidth = @inherit patchstrokewidthNo docs available.

weights = automatic — Vector of statistical weights (length of data). By default, each observation has weight 1.

whiskercolor = @inherit linecolorNo docs available.

whiskerlinewidth = @inherit linewidthNo docs available.

whiskerwidth = 0.0 — Multiplier of width for width of T's on whiskers, or :match to match width.

width = automatic — Width of the box before shrinking.

Examples

using CairoMakie


categories = rand(1:3, 1000)
values = randn(1000)

boxplot(categories, values)

using CairoMakie


categories = rand(1:3, 1000)
values = randn(1000)
dodge = rand(1:2, 1000)

boxplot(categories, values, dodge = dodge, show_notch = true, color = dodge)

Colors are customizable. The color attribute refers to the color of the boxes, whereas outliercolor refers to the color of the outliers. If not scalars (e.g. :red), these attributes must have the length of the data. If outliercolor is not provided, outliers will have the same color as their box, as shown above.

Note

For all indices corresponding to points within the same box, color (but not outliercolor) must have the same value.

using CairoMakie


categories = rand(1:3, 1000)
values = randn(1000)
dodge = rand(1:2, 1000)

boxplot(categories, values, dodge = dodge, show_notch = true, color = map(d->d==1 ? :blue : :red, dodge) , outliercolor = rand([:red, :green, :blue, :black, :yellow], 1000))

Using statistical weights

using CairoMakie, Distributions


N = 100_000
x = rand(1:3, N)
y = rand(Uniform(-1, 5), N)

w = pdf.(Normal(), x .- y)

fig = Figure()

boxplot(fig[1,1], x, y)
boxplot(fig[1,2], x, y, weights = w)

fig

Horizontal axis

using CairoMakie

fig = Figure()

categories = rand(1:3, 1000)
values = randn(1000)

ax_vert = Axis(fig[1,1];
    xlabel = "categories",
    ylabel = "values",
    xticks = (1:3, ["one", "two", "three"])
)
ax_horiz = Axis(fig[1,2];
    xlabel="values", # note that x/y still correspond to horizontal/vertical axes respectively
    ylabel="categories",
    yticks=(1:3, ["one", "two", "three"])
)

# Note: same order of category/value, despite different axes
boxplot!(ax_vert, categories, values) # `orientation=:vertical` is default
boxplot!(ax_horiz, categories, values; orientation=:horizontal)

fig