如何使用Makie.jl检测坐标轴及绘图区域的鼠标点击?
在Makie.jl中精准检测坐标轴与绘图区域的鼠标点击
仅检测绘图区域内的点击
Makie.jl的Axis对象自带plotarea属性,它对应纯粹的绘图矩形区域(不包含坐标轴刻度、标签等外围元素)。通过判断鼠标是否在plotarea内,就能精准捕获仅发生在绘图区的点击:
using GLMakie fig = Figure() ax = Axis(fig[1,1], title="点击绘图区测试") # 绑定鼠标点击事件 on(events(ax.scene).mousebutton, priority=2) do event # 仅当左键按下且鼠标在绘图区内时触发 if event.button == Mouse.left && event.action == Mouse.press && is_mouseinside(ax.plotarea) @info "点击了绘图区域" return Consume(true) # 阻止事件传递给其他回调 end return Consume(false) end display(fig)
仅检测坐标轴外围区域的点击
如果需要捕获坐标轴的非绘图区点击(比如刻度、轴标签、边框等),可以通过同时判断鼠标在Axis的总范围内,但不在绘图区内来实现:
using GLMakie fig = Figure() ax = Axis(fig[1,1], title="点击坐标轴测试") on(events(ax.scene).mousebutton, priority=2) do event if event.button == Mouse.left && event.action == Mouse.press # 鼠标处于Axis整体范围内,但不在绘图区 if is_mouseinside(ax.scene) && !is_mouseinside(ax.plotarea) @info "点击了坐标轴区域" return Consume(true) end end return Consume(false) end display(fig)
关键说明
is_mouseinside(ax.scene):判断鼠标是否在整个Axis的范围内(包含绘图区+坐标轴外围元素)is_mouseinside(ax.plotarea):仅判断鼠标是否在纯绘图区域内- 回调中返回
Consume(true)可阻止事件被更低优先级的回调处理,避免重复触发
内容的提问来源于stack exchange,提问作者BAR
相关产品推荐
相关产品推荐

