Is it possible to place legends inside figures with AlgebraOfGraphics.jl
? I am looking for a functionality similar to what Makie.jl
’s axislegend
function provides.
Hello @TheLateKronos, have you found a solution to this problem?
Nope.
begin
using CairoMakie, AlgebraOfGraphics
df = (
x=rand(500),
y=rand(500),
k=rand(["a", "b", "c"], 500),
l=rand(["d", "e", "f"], 500),
)
plt = data(df) * mapping(:x, :y, color=:k, marker=:l) * visual(Scatter)
# use `draw!` to draw into an existing figure
fig = Figure()
ag = draw!(fig[1,1], plt)
# use internal function to compute legend components
leg = AlgebraOfGraphics.compute_legend(ag)
# add standard legend
Legend(fig[1,2], leg...)
# add axis legend
ax = fig[1,1] |> contents |> first |> contents |> first # get the axis
axislegend(ax, leg...)
fig
end
Thank you very much @fabgrei and all this community!
I could be misunderstanding the use case here, but would just using legend!
work as well?
using CairoMakie, AlgebraOfGraphics
df = (
x=rand(500),
y=rand(500),
k=rand(["a", "b", "c"], 500),
l=rand(["d", "e", "f"], 500),
)
plt = data(df) * mapping(:x, :y, color=:k, marker=:l) * visual(Scatter)
fig = Figure()
gridpos = fig[1, 1]
f = draw!(gridpos, plt)
legend!(gridpos, f; tellwidth=false, halign=:right, valign=:top, margin=(10, 10, 10, 10))
fig
And you can set a padding on the legend as well (or margin, I think that one’s the outside)
Thanks, took a peek at axislegend
to see what values were being used and added it to the example
btw, would it make sense to add a position
keyword for Legend
to have it more closely match axislegend
? Using position=:rt
instead of halign=:right, valign=:top
is really nice
I’m starting to doubt that position
was a good idea, I thought it was a nice shortcut at the time and was inspired by other packages, but the align thing is much simpler. Although it would be an option to go through the motions and refactor GridLayoutBase so it uses only one align
instead of halign
and valign
, and then one could do align = :cc
or so as a shortcut. Would be pretty breaking though.
Oh, I thought position
just passed the corresponding halign
/valign
to Legend
via legend_position_to_aligns
? Do you mean that this is probably more trouble than it’s worth for supporting other types of positioning, like in this issue here for example? `axislegend` cannot be positioned using a Tuple of numbers · Issue #2006 · JuliaPlots/Makie.jl · GitHub