축 확대 효과

Beginner

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

소개

이 튜토리얼은 matplotlib 을 사용하여 줌 효과를 만드는 방법을 안내합니다. 줌 효과를 통해 두 개의 서로 다른 축을 연결하고 확대할 수 있습니다.

VM 팁

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

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

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

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

이 단계에서는 이 튜토리얼에 필요한 필수 라이브러리를 가져오겠습니다. matplotlib 과 mpl_toolkits.axes_grid1 에서 관련 라이브러리를 가져오겠습니다.

import matplotlib.pyplot as plt

from matplotlib.transforms import (Bbox, TransformedBbox,
                                   blended_transform_factory)
from mpl_toolkits.axes_grid1.inset_locator import (BboxConnector,
                                                   BboxConnectorPatch,
                                                   BboxPatch)

축 간의 연결 정의

이 단계에서는 두 축 사이의 연결을 정의합니다. 이 함수는 두 개의 축을 입력으로 받으며, x 축의 최소값과 최대값을 입력으로 받습니다. 그런 다음 경계 상자 (bounding box) 를 생성하고 두 축을 연결합니다.

def zoom_effect01(ax1, ax2, xmin, xmax, **kwargs):
    bbox = Bbox.from_extents(xmin, 0, xmax, 1)

    mybbox1 = TransformedBbox(bbox, ax1.get_xaxis_transform())
    mybbox2 = TransformedBbox(bbox, ax2.get_xaxis_transform())

    prop_patches = {**kwargs, "ec": "none", "alpha": 0.2}

    c1, c2, bbox_patch1, bbox_patch2, p = connect_bbox(
        mybbox1, mybbox2,
        loc1a=3, loc2a=2, loc1b=4, loc2b=1,
        prop_lines=kwargs, prop_patches=prop_patches)

    ax1.add_patch(bbox_patch1)
    ax2.add_patch(bbox_patch2)
    ax2.add_patch(c1)
    ax2.add_patch(c2)
    ax2.add_patch(p)

    return c1, c2, bbox_patch1, bbox_patch2, p

두 번째 확대 축 생성

이 단계에서는 두 번째 확대 축을 생성합니다. 이 함수는 두 개의 축을 입력으로 받습니다. 그런 다음 두 번째 축에 대한 경계 상자 (bounding box) 를 생성하고 이를 첫 번째 축에 연결합니다.

def zoom_effect02(ax1, ax2, **kwargs):
    tt = ax1.transScale + (ax1.transLimits + ax2.transAxes)
    trans = blended_transform_factory(ax2.transData, tt)

    mybbox1 = ax1.bbox
    mybbox2 = TransformedBbox(ax1.viewLim, trans)

    prop_patches = {**kwargs, "ec": "none", "alpha": 0.2}

    c1, c2, bbox_patch1, bbox_patch2, p = connect_bbox(
        mybbox1, mybbox2,
        loc1a=3, loc2a=2, loc1b=4, loc2b=1,
        prop_lines=kwargs, prop_patches=prop_patches)

    ax1.add_patch(bbox_patch1)
    ax2.add_patch(bbox_patch2)
    ax2.add_patch(c1)
    ax2.add_patch(c2)
    ax2.add_patch(p)

    return c1, c2, bbox_patch1, bbox_patch2, p

축 연결

이 단계에서는 축을 연결하고 확대 효과를 생성합니다. 네 개의 축이 있는 그림 (figure) 을 생성하고 zoom_effect01zoom_effect02 함수를 사용하여 연결합니다.

axs = plt.figure().subplot_mosaic([
    ["zoom1", "zoom2"],
    ["main", "main"],
])

axs["main"].set(xlim=(0, 5))
zoom_effect01(axs["zoom1"], axs["main"], 0.2, 0.8)
axs["zoom2"].set(xlim=(2, 3))
zoom_effect02(axs["zoom2"], axs["main"])

plt.show()

요약

이 튜토리얼에서는 matplotlib 을 사용하여 확대 효과를 만드는 방법을 배웠습니다. 먼저 축을 연결하는 함수를 정의한 다음, 두 번째 확대 축을 생성하는 두 번째 함수를 만들었습니다. 마지막으로, 축을 연결하고 확대 효과를 생성했습니다.