violin
violin(x, y; kwargs...)Draw a violin plot.
Arguments
x: positions of the categoriesy: variables whose density is computed
Keywords
weights: vector of statistical weights (length of data). By default, each observation has weight1.orientation=:vertical: orientation of the violins (:verticalor:horizontal)width=1: width of the box before shrinkinggap=0.2: shrinking factor,width -> width * (1 - gap)show_median=false: show median as midlineside=:both: specify:leftor:rightto only plot the violin on one sidescale=:width: scale density by area (:area), count (:count), or width (:width).datalimits: specify values to trim theviolin. Can be aTupleor aFunction(e.g.datalimits=extrema)
Examples
using CairoMakie
categories = rand(1:3, 1000)
values = randn(1000)
violin(categories, values)using Makie, CairoMakie
fig = Figure()
xs = vcat([fill(i, i * 1000) for i in 1:4]...)
ys = vcat(randn(6000), randn(4000) * 2)
for (i, scale) in enumerate([:area, :count, :width])
    ax = Axis(fig[i, 1])
    violin!(ax, xs, ys; scale, show_median=true)
    Makie.xlims!(0.2, 4.8)
    ax.title = "scale=:$(scale)"
end
figusing CairoMakie
categories = rand(1:3, 1000)
values = map(categories) do x
    return x == 1 ? randn() : x == 2 ? 0.5 * randn() : 5 * rand()
end
violin(categories, values, datalimits = extrema)using CairoMakie
N = 1000
categories = rand(1:3, N)
dodge = rand(1:2, N)
side = rand([:left, :right], N)
color = @. ifelse(side === :left, :orange, :teal)
values = map(side) do s
    return s === :left ? randn() : rand()
end
violin(categories, values, dodge = dodge, side = side, color = color)using CairoMakie
N = 1000
categories = rand(1:3, N)
side = rand([:left, :right], N)
color = map(categories, side) do x, s
    colors = s === :left ? [:red, :orange, :yellow] : [:blue, :teal, :cyan]
    return colors[x]
end
values = map(side) do s
    return s === :left ? randn() : rand()
end
violin(categories, values, side = side, color = color)Using statistical weights
using CairoMakie, Distributions
N = 100_000
categories = rand(1:3, N)
values = rand(Uniform(-1, 5), N)
w = pdf.(Normal(), categories .- values)
fig = Figure()
violin(fig[1,1], categories, values)
violin(fig[1,2], categories, values, weights = w)
figHorizontal 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
violin!(ax_vert, categories, values) # `orientation=:vertical` is default
violin!(ax_horiz, categories, values; orientation=:horizontal)
figThese docs were autogenerated using Makie: v0.20.10, GLMakie: v0.9.11, CairoMakie: v0.11.12, WGLMakie: v0.9.10






