Matplotlib Inset Locator

Beginner

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

소개

Matplotlib 는 Python 의 데이터 시각화 라이브러리입니다. .inset_locator 기능은 축의 모서리에 간편하게 삽입 (inset) 을 배치할 수 있도록 해줍니다. 이 랩에서는 .inset_locator 기능을 사용하여 Matplotlib 플롯에 삽입을 생성하는 방법을 살펴봅니다.

VM 팁

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

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

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

두 개의 서브플롯 (subplot) 이 있는 Figure 생성

먼저, 두 개의 서브플롯이 있는 figure 를 생성해야 합니다. plt.subplots() 메서드를 사용하여 나란히 두 개의 서브플롯이 있는 figure 를 생성합니다.

import matplotlib.pyplot as plt

fig, (ax, ax2) = plt.subplots(1, 2, figsize=[5.5, 2.8])

삽입 축 (Inset Axes) 생성

다음으로, 각 서브플롯에 삽입 축을 생성합니다. inset_axes() 메서드를 사용하여 삽입 축을 생성합니다. 서로 다른 크기와 위치의 네 개의 삽입을 생성합니다.

from mpl_toolkits.axes_grid1.inset_locator import inset_axes

## 기본 오른쪽 상단 위치에 너비 1.3 인치, 높이 0.9 인치의 삽입 생성
axins = inset_axes(ax, width=1.3, height=0.9)

## 부모 축의 경계 상자의 30% 너비와 40% 높이의 삽입을 왼쪽 하단 모서리 (loc=3) 에 생성
axins2 = inset_axes(ax, width="30%", height="40%", loc=3)

## 두 번째 서브플롯에 혼합된 사양의 삽입 생성;
## 너비는 부모 축의 경계 상자의 30% 이고
## 높이는 왼쪽 상단 모서리 (loc=2) 에서 1 인치
axins3 = inset_axes(ax2, width="30%", height=1., loc=2)

## 오른쪽 하단 모서리 (loc=4) 에 borderpad=1, 즉
## 부모 축에 10 포인트 패딩 (10pt 가 기본 글꼴 크기) 이 있는 삽입 생성
axins4 = inset_axes(ax2, width="20%", height="20%", loc=4, borderpad=1)

눈금 레이블 끄기

각 삽입에서 눈금 레이블을 제거하려면 tick_params() 메서드를 사용하고 labelleftlabelbottomFalse로 설정할 수 있습니다.

## 삽입의 눈금 레이블 끄기
for axi in [axins, axins2, axins3, axins4]:
    axi.tick_params(labelleft=False, labelbottom=False)

삽입 위치 및 크기 제어

bbox_to_anchorbbox_transform 매개변수를 사용하여 삽입의 위치와 크기를 제어할 수 있습니다. 이러한 매개변수를 사용하면 삽입 위치와 크기를 세밀하게 제어하거나, 삽입을 완전히 임의의 위치에 배치할 수도 있습니다.

## bbox_transform 으로 축 변환을 사용합니다. 따라서 경계 상자는
## 축 좌표로 지정해야 합니다 ((0, 0) 은 축의 왼쪽 하단 모서리이고, (1, 1) 은 오른쪽 상단 모서리입니다).
## 경계 상자 (.2, .4, .6, .5) 는 (.2, .4) 에서 시작하여 해당 좌표에서 (.8, .9) 까지 범위가 지정됩니다.
## 이 경계 상자 내에서 경계 상자 너비의 절반과
## 경계 상자 높이의 3/4 인 삽입이 생성됩니다. 삽입의 왼쪽 하단 모서리는 경계 상자의 왼쪽 하단 모서리에 맞춰집니다 (loc=3).
## 그런 다음 삽입은 글꼴 크기 단위로 기본 0.5 만큼 오프셋됩니다.
axins = inset_axes(ax, width="50%", height="75%",
                   bbox_to_anchor=(.2, .4, .6, .5),
                   bbox_transform=ax.transAxes, loc=3)

임의 위치로 삽입 생성

bbox_to_anchor 매개변수를 사용하여 데이터 좌표에서 경계 상자를 지정하고, bbox_transform 매개변수를 사용하여 경계 상자에 대한 변환을 지정하여 임의 위치로 삽입을 생성할 수 있습니다.

## ax.transData 를 변환으로 사용하여 데이터 좌표에서 삽입 생성
axins3 = inset_axes(ax2, width="100%", height="100%",
                    bbox_to_anchor=(1e-2, 2, 1e3, 3),
                    bbox_transform=ax2.transData, loc=2, borderpad=0)

축 외부에서 삽입 생성

bbox_to_anchor 매개변수를 사용하여 축 외부로 확장되는 축 좌표에서 경계 상자를 지정하여 축 외부에서 삽입을 생성할 수 있습니다.

## 축 외부에서 삽입 생성
axins = inset_axes(ax, width="100%", height="100%",
                   bbox_to_anchor=(1.05, .6, .5, .4),
                   bbox_transform=ax.transAxes, loc=2, borderpad=0)

2-튜플 경계 상자로 삽입 생성

인치 단위로 너비와 높이를 지정하고 bbox_to_anchor 매개변수를 사용하여 삽입의 왼쪽 하단 모서리를 지정하여 2-튜플 경계 상자로 삽입을 생성할 수 있습니다.

## 2-튜플 경계 상자로 삽입 생성. 이는 범위를 갖지 않는 bbox 를 생성합니다.
## 따라서 절대 단위 (인치) 로 너비와 높이를 지정할 때만 의미가 있습니다.
axins2 = inset_axes(ax, width=0.5, height=0.4,
                    bbox_to_anchor=(0.33, 0.25),
                    bbox_transform=ax.transAxes, loc=3, borderpad=0)

Figure 좌표에서 중앙에 위치한 삽입 생성

blended_transform_factory() 메서드를 사용하여 혼합 변환 (blended transform) 을 생성하고 이를 bbox_transform 매개변수로 사용하여 figure 좌표에서 수평으로 중앙에 위치하고 축과 정렬되도록 수직으로 바인딩된 삽입을 생성할 수 있습니다.

## figure 좌표에서 수평으로 중앙에 위치하고 축과 정렬되도록 수직으로 바인딩된 삽입 생성.
from matplotlib.transforms import blended_transform_factory

transform = blended_transform_factory(fig.transFigure, ax2.transAxes)
axins4 = inset_axes(ax2, width="16%", height="34%",
                    bbox_to_anchor=(0, 0, 1, 1),
                    bbox_transform=transform, loc=8, borderpad=0)

요약

이 랩에서는 Matplotlib 의 .inset_locator 기능을 사용하여 플롯에 삽입을 생성하는 방법을 배웠습니다. 다양한 크기와 위치의 삽입을 생성하고, 삽입 위치와 크기를 제어했으며, 임의의 위치에 삽입을 생성했습니다. 또한 축 외부의 삽입, 2-튜플 경계 상자를 가진 삽입, figure 좌표에서 중앙에 위치한 삽입을 생성했습니다.