如何通过单击鼠标python3移动矩形补丁

时间:2019-05-23 08:30:36

标签: python-3.x matplotlib

我需要知道在用鼠标单击任何地方时如何移动矩形补丁? 在矩形下面的代码中,固定的代码是每次我用鼠标单击某个地方时都需要移动它,

import matplotlib.pyplot as plt
import matplotlib.patches as patches

x=y=0.1
fig1 = plt.figure()
ax1 = fig1.add_subplot(111, aspect='equal')
patch= ax1.add_patch(patches.Rectangle((x, y), 0.5, 0.5,
    alpha=1, fill=None,label='Label'))


plt.show()

也许我需要使用“ motion_notify_event”将鼠标连接到矩形,但是我不知道该如何使用该功能!

我的第二个问题是如何使用matplotlib在图像上获取这种类型的矩形“选择图标”,或者在可能的情况下自定义矩形补丁!

enter image description here

先谢谢您

1 个答案:

答案 0 :(得分:1)

要移动矩形,可以使用一个简单的函数,该函数通过fig.canvas.mpl_connect('button_press_event', <function_name>)连接到“按钮按下事件”,并重新定义矩形的x,y原点坐标。我已经将它们移动了矩形的宽度和高度的一半,以便您单击的点将位于矩形的中心。

import matplotlib.pyplot as plt
import matplotlib.patches as patches

def on_press(event):
    xpress, ypress = event.xdata, event.ydata
    w = rect.get_width()
    h = rect.get_height()
    rect.set_xy((xpress-w/2, ypress-h/2))

    ax.lines = []   
    ax.axvline(xpress, c='r')
    ax.axhline(ypress, c='r')

    fig.canvas.draw() 

x = y = 0.1

fig = plt.figure()
ax = fig.add_subplot(111, aspect='equal')
fig.canvas.mpl_connect('button_press_event', on_press)

rect = patches.Rectangle((x, y), 0.1, 0.1, alpha=1, fill=None, label='Label')

ax.add_patch(rect)

plt.show()

至于矩形的漂亮外观,请看一下 matplotlib patchesgallery,看看是否找到合适的东西。我添加了带有红线的十字准线作为替代。