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

如何在Matplotlib散点图中实现鼠标点击及RectangleSelector框选点并改色?

散点图单点点击改色+矩形框选高亮实现方案

以下是结合Matplotlib的RectangleSelector实现需求的完整代码,同时保留你已实现的单点左右键改色功能:

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

# 替换为你的实际数据,这里模拟测试数据
# testdata = df2.to_numpy()
testdata = np.random.rand(50, 2) * 10  # 生成50个随机散点

fig, ax = plt.subplots()
fig.set_size_inches(7.5, 8.25)
# 初始化散点图,用单独数组维护颜色避免版本兼容问题
colors = np.array([(0, 0, 0, 1)] * len(testdata))
coll = ax.scatter(testdata[:,0], testdata[:,1], color=colors, picker=5, s=[10]*len(testdata))

def on_pick(event):
    if event.mouseevent.button == 1:
        print(testdata[event.ind], "clicked")
        colors[event.ind] = (1, 0, 0, 1)
        coll.set_facecolors(colors)
        fig.canvas.draw()
    elif event.mouseevent.button == 3:
        print(testdata[event.ind], "unclicked")
        colors[event.ind] = (0, 0, 0, 1)
        coll.set_facecolors(colors)
        fig.canvas.draw()

def select_callback(eclick, erelease):
    # 获取选框的坐标范围
    x1, y1 = eclick.xdata, eclick.ydata
    x2, y2 = erelease.xdata, erelease.ydata
    xmin, xmax = min(x1, x2), max(x1, x2)
    ymin, ymax = min(y1, y2), max(y1, y2)
    # 筛选选框内的点
    mask = (testdata[:,0] >= xmin) & (testdata[:,0] <= xmax) & \
           (testdata[:,1] >= ymin) & (testdata[:,1] <= ymax)
    # 修改框选点的颜色为红色
    colors[mask] = (1, 0, 0, 1)
    coll.set_facecolors(colors)
    fig.canvas.draw()

# 绑定单点点击事件
fig.canvas.mpl_connect('pick_event', on_pick)

# 初始化矩形选择器:左键拖动绘制选框,松开触发回调
rect_selector = RectangleSelector(
    ax, select_callback,
    drawtype='box', useblit=True,
    button=[1],  # 仅用左键触发框选
    minspanx=5, minspany=5,
    spancoords='pixels',
    interactive=True
)

plt.show()

关键细节说明:

  • 用独立的colors数组维护点的颜色,替代直接修改散点对象的内部属性_facecolors,避免不同Matplotlib版本的兼容性问题
  • 矩形框选通过按住左键拖动实现,松开鼠标后自动筛选选框内的点并修改为红色
  • 保留原有交互逻辑:左键单击单个点变红,右键单击单个点恢复黑色
  • 若需要拖动选框过程中实时高亮选中点,可以扩展select_callback逻辑,添加实时更新的处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:30:59