You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 19:48:11