Введение
В этом практическом занятии мы научимся использовать интерактивные функции в Matplotlib. Эти интерактивные функции включают ginput, waitforbuttonpress и ручное размещение clabel. Цель этого практического занятия - помочь вам понять, как использовать эти функции для создания интерактивных графиков в Matplotlib. В конце этого практического занятия вы сможете создавать и модифицировать графики с использованием интерактивных функций в Matplotlib.
Советы по работе с ВМ
После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и приступить к практике с использованием Jupyter Notebook.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook полностью загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Определение треугольника по трем кликам мышью
В этом шаге мы определим треугольник, кликнув по трем точкам. Для этого мы будем использовать функции ginput и waitforbuttonpress. Функция ginput позволяет выбрать точки на графике мышью, а функция waitforbuttonpress ожидает событие нажатия кнопки.
import time
import matplotlib.pyplot as plt
import numpy as np
def tellme(s):
print(s)
plt.title(s, fontsize=16)
plt.draw()
plt.figure()
plt.xlim(0, 1)
plt.ylim(0, 1)
tellme('You will define a triangle, click to begin')
plt.waitforbuttonpress()
while True:
pts = []
while len(pts) < 3:
tellme('Select 3 corners with mouse')
pts = np.asarray(plt.ginput(3, timeout=-1))
if len(pts) < 3:
tellme('Too few points, starting over')
time.sleep(1) ## Wait a second
ph = plt.fill(pts[:, 0], pts[:, 1], 'r', lw=2)
tellme('Happy? Key click for yes, mouse click for no')
if plt.waitforbuttonpress():
break
## Get rid of fill
for p in ph:
p.remove()
Контур по расстоянию от углов треугольника
В этом шаге мы построим контур по расстоянию от углов треугольника. Мы определим функцию расстояния от отдельных точек и построим контур по этой функции.
## Define a nice function of distance from individual pts
def f(x, y, pts):
z = np.zeros_like(x)
for p in pts:
z = z + 1/(np.sqrt((x - p[0])**2 + (y - p[1])**2))
return 1/z
X, Y = np.meshgrid(np.linspace(-1, 1, 51), np.linspace(-1, 1, 51))
Z = f(X, Y, pts)
CS = plt.contour(X, Y, Z, 20)
tellme('Use mouse to select contour label locations, middle button to finish')
CL = plt.clabel(CS, manual=True)
Масштабирование
В этом шаге мы увеличим масштаб на графике. Мы будем использовать функцию ginput для выбора двух углов области масштабирования и функцию waitforbuttonpress для завершения масштабирования.
tellme('Now do a nested zoom, click to begin')
plt.waitforbuttonpress()
while True:
tellme('Select two corners of zoom, middle mouse button to finish')
pts = plt.ginput(2, timeout=-1)
if len(pts) < 2:
break
(x0, y0), (x1, y1) = pts
xmin, xmax = sorted([x0, x1])
ymin, ymax = sorted([y0, y1])
plt.xlim(xmin, xmax)
plt.ylim(ymin, ymax)
tellme('All Done!')
plt.show()
Резюме
В этом практическом занятии мы научились использовать интерактивные функции в Matplotlib для создания и модификации графиков. Мы использовали ginput, waitforbuttonpress и ручное размещение clabel для определения треугольника, построения контура по расстоянию от углов треугольника и увеличения масштаба на графике. Используя эти функции, мы можем создавать интерактивные графики, которые позволяют пользователю взаимодействовать с данными и изучать их более детально.