소개
Matplotlib TextPath 는 텍스트의 문자를 윤곽선으로 나타내는 경로를 생성할 수 있게 해주는 모듈입니다. 결과로 생성된 경로는 이미지의 클립 경로 (clip path) 등 여러 가지 목적으로 사용될 수 있습니다. 이 랩에서는 TextPath 모듈을 사용하여 이미지에 대한 텍스트 경로를 생성하고 사용자 정의하는 방법을 배우게 됩니다.
VM 팁
VM 시작이 완료되면, 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 접속하십시오.
때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수도 있습니다. Jupyter Notebook 의 제한 사항으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.
학습 중에 문제가 발생하면 언제든지 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 신속하게 해결해 드리겠습니다.
Matplotlib 설치
시작하기 전에, Matplotlib 가 환경에 설치되어 있어야 합니다. 터미널에서 다음 명령을 실행하여 pip 를 통해 설치할 수 있습니다.
pip install matplotlib
필요한 라이브러리 임포트
먼저, TextPath 를 생성하기 위해 필요한 라이브러리를 임포트합니다.
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.cbook import get_sample_data
from matplotlib.image import BboxImage
from matplotlib.offsetbox import (AnchoredOffsetbox, AnnotationBbox, AuxTransformBox)
from matplotlib.patches import PathPatch, Shadow
from matplotlib.text import TextPath
from matplotlib.transforms import IdentityTransform
PathClippedImagePatch 생성
텍스트 경로의 이미지를 그리기 위해 PathClippedImagePatch 객체를 생성합니다. 다음 코드를 사용하여 PathClippedImagePatch 객체를 생성합니다.
class PathClippedImagePatch(PathPatch):
def __init__(self, path, bbox_image, **kwargs):
super().__init__(path, **kwargs)
self.bbox_image = BboxImage(
self.get_window_extent, norm=None, origin=None)
self.bbox_image.set_data(bbox_image)
def set_facecolor(self, color):
super().set_facecolor("none")
def draw(self, renderer=None):
self.bbox_image.set_clip_path(self._path, self.get_transform())
self.bbox_image.draw(renderer)
super().draw(renderer)
Offset Box 생성
PathClippedImagePatch 객체를 추가하기 위해 AuxTransformBox 를 사용하여 offset box 를 생성합니다. 다음 코드를 사용하여 offset box 를 생성합니다.
offsetbox = AuxTransformBox(IdentityTransform())
offsetbox.add_artist(p)
Anchored Offset Box 생성
offset box 를 추가하고 위치를 설정하기 위해 AnnotationBbox 를 사용하여 anchored offset box 를 생성합니다. 다음 코드를 사용하여 anchored offset box 를 생성합니다.
ao = AnchoredOffsetbox(loc='upper left', child=offsetbox, frameon=True,
borderpad=0.2)
ax1.add_artist(ao)
다른 텍스트 추가
PathPatch 를 사용하여 이미지에 다른 텍스트를 추가합니다. 다음 코드를 사용하여 다른 텍스트를 추가합니다.
for usetex, ypos, string in [
(False, 0.25, r"textpath supports mathtext"),
(True, 0.05, r"textpath supports \TeX"),
]:
text_path = TextPath((0, 0), string, size=20, usetex=usetex)
p1 = PathPatch(text_path, ec="w", lw=3, fc="w", alpha=0.9)
p2 = PathPatch(text_path, ec="none", fc="k")
offsetbox2 = AuxTransformBox(IdentityTransform())
offsetbox2.add_artist(p1)
offsetbox2.add_artist(p2)
ab = AnnotationBbox(offsetbox2, (0.95, ypos),
xycoords='axes fraction',
boxcoords="offset points",
box_alignment=(1., 0.),
frameon=False,
)
ax1.add_artist(ab)
이미지 표시
다음 코드를 사용하여 최종 이미지를 표시합니다.
ax1.imshow([[0, 1, 2], [1, 2, 3]], cmap=plt.cm.gist_gray_r,
interpolation="bilinear", aspect="auto")
plt.show()
요약
이 랩에서는 Matplotlib TextPath 모듈을 사용하여 이미지에 대한 텍스트 경로를 생성하고 사용자 정의하는 방법을 배웠습니다. 이 랩에 설명된 단계를 따르면 다양한 목적으로 유용한 사용자 정의 텍스트 경로가 있는 이미지를 만들 수 있습니다.