Matplotlib 에서 BboxImage 생성하기

Beginner

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

소개

이 랩에서는 Matplotlib 에서 BboxImage 를 생성하는 방법을 배웁니다. BboxImage 는 경계 상자 (bounding box) 에 따라 이미지를 배치하는 데 사용될 수 있습니다. 텍스트를 사용하여 BboxImage 를 생성하는 방법과 각 컬러맵 (colormap) 에 대한 BboxImage 를 생성하는 방법을 보여드리겠습니다.

VM 팁

VM 시작이 완료되면, 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 접속하십시오.

때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.

학습 중에 문제가 발생하면 언제든지 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 신속하게 해결해 드리겠습니다.

필요한 라이브러리 임포트

이 튜토리얼에 필요한 라이브러리를 임포트하는 것으로 시작합니다. matplotlib.pyplot, numpy, BboxImage, BboxTransformedBbox가 필요합니다.

import matplotlib.pyplot as plt
import numpy as np

from matplotlib.image import BboxImage
from matplotlib.transforms import Bbox, TransformedBbox

텍스트를 사용하여 BboxImage 생성

텍스트를 사용하여 BboxImage 를 생성하는 것으로 시작합니다. text() 메서드를 사용하여 text 객체를 생성하고 이를 ax1 객체에 추가합니다. 그런 다음 add_artist() 메서드를 사용하여 BboxImage 객체를 생성합니다. 텍스트의 경계 상자를 얻기 위해 text 객체의 get_window_extent 메서드를 BboxImage 생성자에 전달합니다. 또한 이미지를 생성하기 위해 (1, 256) 모양의 1 차원 배열을 BboxImage 생성자의 data 매개변수에 전달합니다.

fig, (ax1, ax2) = plt.subplots(ncols=2)

txt = ax1.text(0.5, 0.5, "test", size=30, ha="center", color="w")
ax1.add_artist(
    BboxImage(txt.get_window_extent, data=np.arange(256).reshape((1, -1))))

각 컬러맵에 대한 BboxImage 생성

다음으로, 각 컬러맵에 대한 BboxImage 를 생성합니다. plt.colormaps 메서드를 사용하여 모든 컬러맵의 목록을 생성하는 것으로 시작합니다. 그런 다음 컬러맵 목록을 반복하는 for 루프를 생성합니다. 각 컬러맵에 대해 divmod() 메서드를 사용하여 ixiy 위치를 계산합니다. 그런 다음 Bbox.from_bounds() 메서드를 사용하여 Bbox 객체를 생성합니다. 경계 상자를 생성하기 위해 ix, iy, dxdy 값을 Bbox.from_bounds() 메서드에 전달합니다. 그런 다음 Bbox 객체와 ax2.transAxes 객체를 사용하여 TransformedBbox 객체를 생성합니다. 마지막으로 add_artist() 메서드를 사용하여 BboxImage 객체를 생성합니다. 컬러맵으로 이미지를 생성하기 위해 TransformedBbox 객체를 BboxImage 생성자에 전달합니다.

cmap_names = sorted(m for m in plt.colormaps if not m.endswith("_r"))

ncol = 2
nrow = len(cmap_names) // ncol + 1

xpad_fraction = 0.3
dx = 1 / (ncol + xpad_fraction * (ncol - 1))

ypad_fraction = 0.3
dy = 1 / (nrow + ypad_fraction * (nrow - 1))

for i, cmap_name in enumerate(cmap_names):
    ix, iy = divmod(i, nrow)
    bbox0 = Bbox.from_bounds(ix*dx*(1+xpad_fraction),
                             1 - iy*dy*(1+ypad_fraction) - dy,
                             dx, dy)
    bbox = TransformedBbox(bbox0, ax2.transAxes)
    ax2.add_artist(
        BboxImage(bbox, cmap=cmap_name, data=np.arange(256).reshape((1, -1))))

플롯 표시

마지막으로, show() 메서드를 사용하여 플롯을 표시합니다.

plt.show()

요약

이 랩에서는 Matplotlib 에서 BboxImage 를 생성하는 방법을 배웠습니다. 텍스트가 있는 BboxImage 와 각 컬러맵에 대한 BboxImage 를 생성했습니다. 이 지식을 사용하여 다양한 경계 상자 (bounding box) 와 컬러맵을 가진 이미지를 생성할 수 있습니다.