# violin

``violin(x, y; kwargs...)``

Draw a violin plot.

# Arguments

• `x`: positions of the categories

• `y`: variables whose density is computed

# Keywords

• `weights`: vector of statistical weights (length of data). By default, each observation has weight `1`.

• `orientation=:vertical`: orientation of the violins (`:vertical` or `:horizontal`)

• `width=1`: width of the box before shrinking

• `gap=0.2`: shrinking factor, `width -> width * (1 - gap)`

• `show_median=true`: show median as midline

• `side=:both`: specify `:left` or `:right` to only plot the violin on one side

• `datalimits`: specify values to trim the `violin`. Can be a `Tuple` or a `Function` (e.g. `datalimits=extrema`)

### Examples

``````using CairoMakie

xs = rand(1:3, 1000)
ys = randn(1000)

violin(xs, ys)`````` ``````using CairoMakie

xs = rand(1:3, 1000)
ys = map(xs) do x
return x == 1 ? randn() : x == 2 ? 0.5 * randn() : 5 * rand()
end

violin(xs, ys, datalimits = extrema)`````` ``````using CairoMakie

N = 1000
xs = rand(1:3, N)
dodge = rand(1:2, N)
side = rand([:left, :right], N)
color = @. ifelse(side == :left, :orange, :teal)
ys = map(side) do s
return s == :left ? randn() : rand()
end

violin(xs, ys, dodge = dodge, side = side, color = color)`````` ``````using CairoMakie

N = 1000
xs = rand(1:3, N)
side = rand([:left, :right], N)
color = map(xs, side) do x, s
colors = s == :left ? [:red, :orange, :yellow] : [:blue, :teal, :cyan]
return colors[x]
end
ys = map(side) do s
return s == :left ? randn() : rand()
end

violin(xs, ys, side = side, color = color)`````` #### 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()

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

fig`````` 