Техники интерактивной визуализации в Matplotlib

PythonPythonBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Этот практикум旨在向您介绍Matplotlib中的拾取概念。能够拾取艺术家对象是一个强大的工具,可用于构建响应用户操作的交互式可视化。我们将介绍简单拾取、使用自定义命中测试函数进行拾取、在散点图上进行拾取以及拾取图像。

Советы по работе с ВМ

После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и приступить к практике в Jupyter Notebook.

Иногда может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений в Jupyter Notebook.

Если вы столкнетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Простая подборка, линии, прямоугольники и текст

Начнем с включения простой подборки, установив свойство "picker" для художника. Это позволит художнику сгенерировать событие подбора, если событие мыши происходит над художником. Создадим простую диаграмму, содержащую линию, прямоугольник и текст, и применим подборку для каждого из этих художников.

fig, (ax1, ax2) = plt.subplots(2, 1)
ax1.set_title('click on points, rectangles or text', picker=True)
ax1.set_ylabel('ylabel', picker=True, bbox=dict(facecolor='red'))
line, = ax1.plot(rand(100), 'o', picker=True, pickradius=5)

## Выберите прямоугольник.
ax2.bar(range(10), rand(10), picker=True)
for label in ax2.get_xticklabels():  ## Сделайте метки делений по оси x доступными для подбора.
    label.set_picker(True)

Создание пользовательской функции проверки попадания

В этом шаге мы определим пользовательский подборщик, установив picker равным вызываемой функции. Функция будет определять, попадает ли мышью на художника. Если событие мыши происходит над художником, мы вернем hit=True, а props - это словарь свойств, которые вы хотите добавить к атрибутам .PickEvent.

def line_picker(line, mouseevent):
    """
    Найти точки в определенном расстоянии от щелчка мыши в
    координатах данных и прикрепить некоторые дополнительные атрибуты, pickx и picky
    которые являются точками данных, которые были выбраны.
    """
    if mouseevent.xdata is None:
        return False, dict()
    xdata = line.get_xdata()
    ydata = line.get_ydata()
    maxd = 0.05
    d = np.sqrt(
        (xdata - mouseevent.xdata)**2 + (ydata - mouseevent.ydata)**2)

    ind, = np.nonzero(d <= maxd)
    if len(ind):
        pickx = xdata[ind]
        picky = ydata[ind]
        props = dict(ind=ind, pickx=pickx, picky=picky)
        return True, props
    else:
        return False, dict()


def onpick2(event):
    print('onpick2 line:', event.pickx, event.picky)


fig, ax = plt.subplots()
ax.set_title('custom picker for line data')
line, = ax.plot(rand(100), rand(100), 'o', picker=line_picker)
fig.canvas.mpl_connect('pick_event', onpick2)

Подборка на точечной диаграмме

Точечная диаграмма основана на ~matplotlib.collections.PathCollection. Мы создадим точечную диаграмму и применим подборку.

x, y, c, s = rand(4, 100)


def onpick3(event):
    ind = event.ind
    print('onpick3 scatter:', ind, x[ind], y[ind])


fig, ax = plt.subplots()
ax.scatter(x, y, 100*s, c, picker=True)
fig.canvas.mpl_connect('pick_event', onpick3)

Подборка изображений

Изображения, нарисованные с использованием .Axes.imshow, являются объектами ~matplotlib.image.AxesImage. Мы создадим фигуру с несколькими изображениями и применим подборку.

fig, ax = plt.subplots()
ax.imshow(rand(10, 5), extent=(1, 2, 1, 2), picker=True)
ax.imshow(rand(5, 10), extent=(3, 4, 1, 2), picker=True)
ax.imshow(rand(20, 25), extent=(1, 2, 3, 4), picker=True)
ax.imshow(rand(30, 12), extent=(3, 4, 3, 4), picker=True)
ax.set(xlim=(0, 5), ylim=(0, 5))


def onpick4(event):
    artist = event.artist
    if isinstance(artist, AxesImage):
        im = artist
        A = im.get_array()
        print('onpick4 image', A.shape)


fig.canvas.mpl_connect('pick_event', onpick4)

Резюме

В этом практическом занятии мы узнали, как включить подборку для различных художников в Matplotlib, включая линии, прямоугольники, текст, точечные диаграммы и изображения. Мы также узнали, как определить пользовательские функции проверки попадания, чтобы обеспечить более сложную поведение подбора. Эта мощная функция позволяет создавать интерактивные визуализации, которые реагируют на действия пользователя.