Введение
В этом практическом занятии вы научитесь создавать эффект "зеркала", используя события мыши в Matplotlib. В этом примере вы сможете изучать данные в круглой области, которую можно перемещать, кликая и перетаскивая мышью.
Советы по использованию ВМ
После запуска виртуальной машины кликните в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится полностью. Проверка операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импорт необходимых библиотек
Нам необходимо импортировать библиотеку Matplotlib, библиотеку NumPy и модуль Matplotlib patches. Мы будем использовать эти библиотеки для создания эффекта "зеркала".
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as patches
Генерация случайных данных
Мы сгенерируем два набора случайных данных с использованием NumPy. Эти данные будут использоваться для построения точечного графика.
## Fixing random state for reproducibility
np.random.seed(19680801)
x, y = np.random.rand(2, 200)
Создание фигуры и осей
Мы создадим объект фигуры и оси с использованием функции subplots(). Также мы добавим на объект оси круговой участок желтого цвета с использованием функции patches.Circle().
fig, ax = plt.subplots()
circ = patches.Circle((0.5, 0.5), 0.25, alpha=0.8, fc='yellow')
ax.add_patch(circ)
Построение графика данных
Мы построим сгенерированные в шаге 2 случайные данные с использованием функции plot() дважды. Первый график будет иметь значение альфа 0,2, а второй график будет иметь значение альфа 1,0 и путь обрезания, установленный на круговой участок желтого цвета.
ax.plot(x, y, alpha=0.2)
line, = ax.plot(x, y, alpha=1.0, clip_path=circ)
ax.set_title("Left click and drag to move looking glass")
Создание обработчика событий
Мы создадим класс обработчика событий, который будет обрабатывать события мыши, необходимые для перемещения кругового участка желтого цвета по графику. Этот класс будет содержать три метода: on_press(), on_release() и on_move().
class EventHandler:
def __init__(self):
fig.canvas.mpl_connect('button_press_event', self.on_press)
fig.canvas.mpl_connect('button_release_event', self.on_release)
fig.canvas.mpl_connect('motion_notify_event', self.on_move)
self.x0, self.y0 = circ.center
self.pressevent = None
def on_press(self, event):
if event.inaxes!= ax:
return
if not circ.contains(event)[0]:
return
self.pressevent = event
def on_release(self, event):
self.pressevent = None
self.x0, self.y0 = circ.center
def on_move(self, event):
if self.pressevent is None or event.inaxes!= self.pressevent.inaxes:
return
dx = event.xdata - self.pressevent.xdata
dy = event.ydata - self.pressevent.ydata
circ.center = self.x0 + dx, self.y0 + dy
line.set_clip_path(circ)
fig.canvas.draw()
handler = EventHandler()
plt.show()
Запуск программы
Запустите программу и щелкните левой кнопкой мыши и перетащите круговой участок желтого цвета, чтобы переместить его по графику. Вы можете использовать этот эффект для проверки данных в круглой области.
Резюме
В этом практическом занятии мы узнали, как создать эффект зеркального просмотра с использованием событий мыши в Matplotlib. Мы сгенерировали случайные данные, построили график этих данных и создали класс обработчика событий для обработки событий мыши. Щелкнув левой кнопкой мыши и перетащив круговой участок желтого цвета, мы смогли переместить его по графику и проверить данные в круглой области.