Skip to content
julia
using CairoMakie, PalmerPenguins, DataFrames
using AlgebraOfGraphics


function getPenguins()
    # ENV["DATADEPS_ALWAYS_ACCEPT"] = "true"
    penguins = dropmissing(DataFrame(PalmerPenguins.load()))
    return penguins
end
let
    penguins = getPenguins()
    # declare new plot attributes
    palette = (color=tuple.(["#FC7808", "#8C00EC", "#107A78"], 0.65),
        marker=[:circle, :utriangle, :rect])
    cycle = Cycle([:color, :marker], covary=true)

    p_len  = data(penguins)
    p_len *= mapping(:flipper_length_mm => (t -> t / 10),
        :bill_length_mm => (t -> t / 10))
    p_len *= mapping(color=:species, marker=:species)

    bpl = data(penguins)
    bpl *= mapping(:species, :bill_length_mm => (t -> t / 10), color = :species)
    bpl *= visual(Violin)

    bplt = data(penguins)
    bplt *= mapping(:species, :flipper_length_mm => (t -> t / 10), color = :species)
    bplt *= visual(Violin, orientation = :horizontal)

    fig = with_theme(theme_light(), size = (600,400), palette=palette, Scatter=(cycle=cycle,)) do
        fig = Figure()
        axs = [Axis(fig[2,1], xlabel = "flipper length (cm)", ylabel = "bill length (cm)"),
            Axis(fig[1,1]), Axis(fig[2,2])]
        dots = draw!(axs[1], p_len)
        draw!(axs[2], bplt)
        draw!(axs[3], bpl)
        # getting the right layout aspect
        colsize!(fig.layout, 1, Auto(4.0))
        rowsize!(fig.layout, 1, Auto(1/3))
        colgap!(fig.layout,3)
        rowgap!(fig.layout, 3)
        linkxaxes!(axs[1], axs[2])
        linkyaxes!(axs[1], axs[3])
        hidedecorations!.(axs[2:3], grid=false)
        legend!(fig[1,2], dots)
        fig
    end

end
CairoMakie.Screen{SVG}