I’m interested in understanding how one can rotate a whole axis/plot in Makie, in order to produce visualizations like the one below.
This solution was posted by Simon Danisch on Slack:
using GLMakie
f, ax, pl = barplot(rand(5), bar_labels=:y, figure=(resolution=(500, 500),))
hideydecorations!(ax)
hidespines!(ax, :t, :r, :l)
hidexdecorations!(ax, ticks=false)
tightlimits!(ax)
f
img = Makie.colorbuffer(ax.scene)
f, ax, pl = scatter(rand(Point2f, 100), axis=(aspect = DataAspect(),))
impl = image!(ax, 0..1, 0..1, rotr90(img))
display(f)
rotate!(impl, -0.25pi)
translate!(impl, 0.5, 1.2, 0)
xlims!(ax, 0, 2)
ylims!(ax, 0, 2)
Although it’s a great solution, I’v got some problems with it. First of all, it does not seem to work with CairoMakie. Secondly, I’d like for the visualization to be fully svg, which I’m guessing would not be the case here, since img = Makie.colorbuffer(ax.scene) would rasterize the original scene.
Following the Julia Data Science book by @lazarusA , I tried the following:
function add_box_inset(fig; left=100, right=250, bottom=200, top=300,
bgcolor=:grey90)
inset_box = Axis(fig, bbox=BBox(left, right, bottom, top),
xticklabelsize=12, yticklabelsize=12, backgroundcolor=bgcolor)
# bring content upfront
translate!(inset_box.scene, 0, 0, 10)
qx = qrotation(Vec(1, 0, 0), pi / 4)
rotate!(inset_box.scene,qr)
elements = keys(inset_box.elements)
filtered = filter(ele -> ele != :xaxis && ele != :yaxis, elements)
foreach(ele -> translate!(inset_box.elements[ele], 0, 0, 9), filtered)
return inset_box
end
But with no success. Any ideas?
