# Only return mouse position if inside an Axis using GLMakie

**URL:** <https://discourse.julialang.org/t/only-return-mouse-position-if-inside-an-axis-using-glmakie/115204>\
**Category:** Visualization\
**Tags:** plotting, glmakie\
**Created:** [June 5, 2024, 2:47am UTC](https://discourse.julialang.org/t/only-return-mouse-position-if-inside-an-axis-using-glmakie/115204 "2024-06-05T02:47:27Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![garrek](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/garrek/32/27937_2.png) [@garrek](https://discourse.julialang.org/u/garrek)\
**Post date:** [June 5, 2024, 2:47am UTC](https://discourse.julialang.org/t/only-return-mouse-position-if-inside-an-axis-using-glmakie/115204/1 "2024-06-05T02:47:28Z")

</div>

I’m making an interactive heatmap where I get the mouse position and update a second plot. I provided a MWE where a horizontal line moves with the mouse, but I only want to update the line when the mouse is inside of this Axis. I see that `pick()` might be the way to do this, but I can’t seem to figure out how. What should I be using?

```julia
using GLMakie

fig = Figure()

yline = Observable(50.0)

ax = Axis(fig[1, 1])
hm = heatmap!(rand(100, 100))
hlines!(yline, color = :red)

on(events(ax).mouseposition) do mpos
    yline[] = trunc(Int, mouseposition(ax.scene)[2])
    yaxis_limits = ax.yaxis.attributes.limits[]
    
    if yline[] >= yaxis_limits[1] && yline[] <= yaxis_limits[2]
        println("In bounds")
    else
        println("Out of bounds")
    end
end

fig

```

 ![Screenshot 2024-06-05 at 11.48.03](https://global.discourse-cdn.com/julialang/original/3X/7/e/7e1df8b6262f47e9b07e22c26288b463f1b9014e.png)

---

<div class="post-metadata">

**Author:** ![davide](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/davide/32/52136_2.png) [@davide](https://discourse.julialang.org/u/davide)\
**Post date:** [June 5, 2024, 9:33am UTC](https://discourse.julialang.org/t/only-return-mouse-position-if-inside-an-axis-using-glmakie/115204/2 "2024-06-05T09:33:53Z")

</div>

Maybe something like this:

```julia
yaxis_limits = ax.yaxis.attributes.limits[]
xaxis_limits = ax.xaxis.attributes.limits[]

on(events(ax).mouseposition) do mpos
    if (yaxis_limits[1] <= trunc(Int, mouseposition(ax.scene)[2]) <= yaxis_limits[2]) &&
       (xaxis_limits[1] <= trunc(Int, mouseposition(ax.scene)[1]) <= xaxis_limits[2])
        yline[] = trunc(Int, mouseposition(ax.scene)[2])
    end
end

```

---

<div class="post-metadata">

**Author:** ![aplavin](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/aplavin/32/222056_2.png) [@aplavin](https://discourse.julialang.org/u/aplavin)\
**Post date:** [June 5, 2024, 11:21am UTC](https://discourse.julialang.org/t/only-return-mouse-position-if-inside-an-axis-using-glmakie/115204/3 "2024-06-05T11:21:05Z")

</div>

Try:

```julia
	on(events(fig).mouseposition) do pos
		if is_mouseinside(ax)
			yourvariable[] = mouseposition(ax)
		end

```

---

<div class="post-metadata">

**Author:** ![garrek](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/garrek/32/27937_2.png) [@garrek](https://discourse.julialang.org/u/garrek)\
**Post date:** [June 6, 2024, 1:40am UTC](https://discourse.julialang.org/t/only-return-mouse-position-if-inside-an-axis-using-glmakie/115204/4 "2024-06-06T01:40:41Z")

</div>

Yes, thank you. This works and is the sort of method I was looking for.
