i’d like to put a maximum on how much a user can pan or zoom out on a plot. but i could not find a function in the makie docs to set an upper bound on the axis limits. so i hacked it like this:
using GLMakie
f,a,s = scatter([1,2,3])
on(a.finallimits) do x
if x.origin[2]>5
a.finallimits[] = GLMakie.GeometryBasics.HyperRectangle{2, Float32}([x.origin[1], 5], x.widths)
end
end
try panning upwards. you can’t go above the lower y-value being 5 now.
but is there a more cannonical way to do this? did i just miss a function to do this for you? seems like it would be a nice feature to have.
small correction-- targetlimits
should be modified not finallimits
.
so here then is an example which prevents the user from zooming out further than the limits of the data:
using GLMakie
x, y = rand(10), rand(10)
f,a,s = scatter(x,y)
on(a.finallimits) do fl
o1 = max(fl.origin[1], minimum(x))
o2 = max(fl.origin[2], minimum(y))
w1 = min(fl.widths[1]+fl.origin[1], maximum(x))-o1
w2 = min(fl.widths[2]+fl.origin[2], maximum(y))-o2
a.targetlimits[] = GLMakie.GeometryBasics.HyperRectangle{2, Float32}([o1,o2],[w1,w2])
end
i believe an optional feature like this is genuinely useful.
one way to build this into Makie would be to add a bounds
variable to the Axis struct, and then insert a max
and min
in the ScrollZoom interaction to enforce it. i didn’t go to the trouble of submitting a PR due to the lackluster response this post created.
alternatively, one could deactivate_interaction!
the default, and add your own, which included these modifications.