Как переместить прямоугольник патч с помощью мыши мыши Python3 - PullRequest
1 голос
/ 23 мая 2019

Мне нужно знать, как я могу переместить прямоугольник, когда я щелкаю мышью в любом месте?в приведенном ниже коде прямоугольник исправлен. Мне просто нужно перемещать его каждый раз, когда я щелкаю мышью где-то,

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», чтобы соединить мышь с прямоугольником, но id'ont знаюкак я могу использовать эту функцию!

Мой второй вопрос - как получить этот тип прямоугольника «значок выделения» на изображении с помощью matplotlib или, если возможно, настроить прямоугольный патч!

enter image description here

спасибо заранее

1 Ответ

1 голос
/ 23 мая 2019

Для перемещения прямоугольника вы можете использовать простую функцию, которая подключается к «событию нажатия кнопки» через 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 или галерея и посмотрите, найдете ли вы что-то подходящее.Я добавил перекрестие с красными линиями в качестве альтернативы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...