Matplotlib 텍스트 회전

Beginner

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

소개

이 랩에서는 rotation_mode 매개변수를 사용하여 Matplotlib 에서 텍스트를 회전하는 방법을 배웁니다. rotation_mode 매개변수는 텍스트의 회전 및 정렬 순서를 결정합니다. defaultanchor의 두 가지 모드를 사용할 수 있습니다.

VM 팁

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

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

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

필요한 라이브러리 가져오기

먼저, 필요한 라이브러리를 가져와야 합니다. 이 랩에서는 Matplotlib 를 사용하여 플롯을 생성합니다.

import matplotlib.pyplot as plt

test_rotation_mode 함수 정의

다양한 회전 모드를 테스트하기 위해 서브플롯을 생성하는 test_rotation_mode라는 함수를 만들 것입니다. 이 함수는 figmode의 두 가지 매개변수를 사용합니다.

def test_rotation_mode(fig, mode):

수평 및 수직 정렬 목록 정의

다음으로, 서브플롯을 생성하는 데 사용될 수평 및 수직 정렬 목록을 정의합니다. 각 목록에 대해 세 개의 요소를 생성합니다: 수평 정렬의 경우 "left", "center", "right"이고, 수직 정렬의 경우 "top", "center", "baseline", "bottom"입니다.

ha_list = ["left", "center", "right"]
va_list = ["top", "center", "baseline", "bottom"]

서브플롯 생성

이제 subplots 함수를 사용하여 서브플롯을 생성합니다. 동일한 종횡비 (aspect ratio) 를 가진 서브플롯 그리드를 생성하고, x 축과 y 축에서 눈금을 제거합니다. 또한 정렬을 시각화하기 위해 각 서브플롯의 중앙에 수직 및 수평선을 추가합니다.

axs = fig.subplots(len(va_list), len(ha_list), sharex=True, sharey=True,
                   subplot_kw=dict(aspect=1),
                   gridspec_kw=dict(hspace=0, wspace=0))

for i, va in enumerate(va_list):
    for j, ha in enumerate(ha_list):
        ax = axs[i, j]
        ax.set(xticks=[], yticks=[])
        ax.axvline(0.5, color="skyblue", zorder=0)
        ax.axhline(0.5, color="skyblue", zorder=0)
        ax.plot(0.5, 0.5, color="C0", marker="o", zorder=1)

서브플롯에 텍스트 추가

text 함수를 사용하여 각 서브플롯에 텍스트를 추가합니다. rotation, horizontalalignment, verticalalignment, 및 rotation_mode 매개변수를 사용하여 텍스트를 회전하고 정렬합니다. 또한 bbox 매개변수를 사용하여 텍스트의 경계 상자를 강조 표시합니다.

kw = (
    {} if mode == "default" else
    {"bbox": dict(boxstyle="square,pad=0.", ec="none", fc="C1", alpha=0.3)}
)

texts = {}

for i, va in enumerate(va_list):
    for j, ha in enumerate(ha_list):
        ax = axs[i, j]
        tx = ax.text(0.5, 0.5, "Tpg",
                     size="x-large", rotation=40,
                     horizontalalignment=ha, verticalalignment=va,
                     rotation_mode=mode, **kw)
        texts[ax] = tx

텍스트의 경계 상자 강조 표시

rotation_mode'default'로 설정된 경우, 사각형을 사용하여 텍스트의 경계 상자를 강조 표시합니다. get_window_extent 함수를 사용하여 경계 상자를 가져오고, transData 속성을 사용하여 데이터 좌표로 변환합니다.

if mode == "default":
    fig.canvas.draw()
    for ax, text in texts.items():
        bb = text.get_window_extent().transformed(ax.transData.inverted())
        rect = plt.Rectangle((bb.x0, bb.y0), bb.width, bb.height,
                             facecolor="C1", alpha=0.3, zorder=2)
        ax.add_patch(rect)

서브피겨 생성 및 test_rotation_mode 함수 호출

두 개의 서브피겨를 생성하고 figmode 매개변수를 사용하여 test_rotation_mode 함수를 호출합니다.

fig = plt.figure(figsize=(8, 5))
subfigs = fig.subfigures(1, 2)
test_rotation_mode(subfigs[0], "default")
test_rotation_mode(subfigs[1], "anchor")
plt.show()

요약

이 랩에서는 rotation_mode 매개변수를 사용하여 Matplotlib 에서 텍스트를 회전하는 방법을 배웠습니다. 다양한 회전 모드를 테스트하기 위해 서브플롯을 생성하는 test_rotation_mode라는 함수를 만들었습니다. 수평 및 수직 정렬 목록을 정의하고, 서브플롯을 생성하고, 서브플롯에 텍스트를 추가하고, 텍스트의 경계 상자를 강조 표시했습니다. 마지막으로, 서브피겨를 생성하고 test_rotation_mode 함수를 호출했습니다.