Как создать масштабируемые изображения в осях matplotlib? - PullRequest
0 голосов
/ 21 апреля 2019

Я создаю интерактивный дисплей TSNE, показывающий примеры изображений, которые объединяются. Моя текущая реализация делает это путем создания объектов OffsetImage, обернутых AnnotationBBox. Каждый OffsetImage содержит изображение с размером (75, 75) пикселей, которое отображается в системе координат пространства данных.

Изображения в настоящее время отображаются визуально одинакового размера после каждого увеличения (используя инструмент «Лупа» в окне matplotlib). В идеале я хотел бы иметь возможность масштабировать изображения по мере увеличения масштаба пространства данных, чтобы можно было более тщательно исследовать определенные кластеры.

В идеале, я бы предпочел сохранять каждое изображение с полным разрешением (или уменьшенным, сохраняя соотношение сторон) и вручную обновлять параметр масштаба OffsetImage после каждого события масштабирования. Но я не уверен, как извлечь или вычислить коэффициент масштабирования вида и какие события мне нужно прослушивать.

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

for i in indices_to_render:
    pt = self.points[i]
    url = self.image_urls[i]
    img = img_dict[url]
    logging.debug('rendering image of size: %s for pt: %s from url: %s', str(img.shape), str(pt), url)

    offset_img = OffsetImage(img, zoom=1, picker=True)
    ab = AnnotationBbox(offset_img, pt, bboxprops=dict(edgecolor=border_color), xycoords='data')
    ab.set_picker(True)
    offset_img.set_picker(True)

    self.artists.append(self.ax.add_artist(ab))
    self.images.append(offset_img)
...