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

Matplotlib热力图是否支持多拖拽矩形选择及编辑功能?

Matplotlib 拖拽式矩形选择功能实现方案

Matplotlib本身没有直接内置带工具栏按钮的可编辑多矩形选择功能,但可以借助**matplotlib.widgets模块**实现拖拽选框、调整大小、移动及多区域选择的需求,具体方案如下:

核心实现思路

  • 用RectangleSelector实现基础拖拽选框,开启交互属性支持选框的大小调整与位置移动
  • 通过维护矩形对象列表,实现同一张图上的多区域选择

完整示例代码

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets import RectangleSelector

# 生成热力图数据
data = np.random.random((16, 16))
fig, ax = plt.subplots()
ax.imshow(data, cmap='jet', interpolation='nearest')

# 存储所有已选择的矩形
selected_rects = []

def onselect(eclick, erelease):
    """拖拽完成后创建矩形选框"""
    x1, y1 = eclick.xdata, eclick.ydata
    x2, y2 = erelease.xdata, erelease.ydata
    # 创建矩形并添加到坐标轴和列表中
    rect = plt.Rectangle(
        (min(x1,x2), min(y1,y2)), abs(x2-x1), abs(y2-y1),
        edgecolor='red', facecolor='none', linewidth=2
    )
    ax.add_patch(rect)
    selected_rects.append(rect)
    fig.canvas.draw()

def toggle_selector(event):
    """用快捷键控制选择器的激活/关闭"""
    if event.key in ['Q', 'q'] and toggle_selector.RS.active:
        toggle_selector.RS.set_active(False)
    if event.key in ['A', 'a'] and not toggle_selector.RS.active:
        toggle_selector.RS.set_active(True)

# 初始化矩形选择器,开启交互支持调整与移动
toggle_selector.RS = RectangleSelector(
    ax, onselect,
    drawtype='box', useblit=True,
    button=[1],  # 仅使用左键拖拽创建选框
    minspanx=5, minspany=5,
    spancoords='pixels',
    interactive=True
)

# 绑定快捷键:按A激活选择器,按Q关闭选择器
fig.canvas.mpl_connect('key_press_event', toggle_selector)

plt.show()

功能说明

  • 拖拽创建选框:按住左键拖拽即可生成红色边框的矩形选框
  • 调整与移动:点击已创建的选框边缘或内部,可拖拽调整大小或移动位置
  • 多区域支持:重复拖拽操作可创建多个独立的矩形选框
  • 快捷键控制:用A/Q键快速切换选择器的激活状态,避免误操作

扩展优化方向

  • 可给矩形添加右键菜单,支持删除单个选框
  • 自定义工具栏按钮:通过fig.canvas.toolbar.add_toolitem添加自定义按钮,绑定激活/关闭选择器的逻辑
  • 导出选框坐标:遍历selected_rects列表,通过rect.get_bbox()获取每个选框的坐标信息

内容的提问来源于stack exchange,提问作者Basj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:15:01