Matplotlib Inset 그래프 삽입하기


Matplotlib Inset 그래프 삽입하기

Inset 그래프는 추가로 데이터를 표현하기 위해 삽입한 작은 그래프입니다.

이 페이지에서는 Matplotlib 그래프에 Inset 그래프를 삽입하는 방법에 대해 소개합니다.



1) 기본 사용

예제1

import matplotlib.pyplot as plt
import numpy as np

plt.style.use('default')
plt.rcParams['figure.figsize'] = (6, 6)
plt.rcParams['font.size'] = 14

data = np.random.rand(100, 100)

fig, ax = plt.subplots()
ax.imshow(data, extent=(0, 100, 0, 100), origin='lower')

# Inset Graph
axins = ax.inset_axes([0.5, 0.5, 0.45, 0.45])
axins.imshow(data[10:20, 10:20], extent=(10, 20, 10, 20), origin='lower')

plt.show()

우선 np.random.rand()를 사용해서 그래프에 표시할 데이터 (data)를 만듭니다.

matplotlib.axes.Axes.inset_axes()는 현재 Axesinset axes를 추가합니다.

입력한 리스트 [0.5, 0.5, 0.45, 0.45]는 현재 inset axes가 표시될 영역의 x0, y0, width, height 입니다.

imshow()를 사용해서 data[10:20, 10:20] 영역을 inset 그래프에 나타나도록 했습니다.

결과는 아래와 같습니다.


Matplotlib Inset 그래프 삽입하기 - 기본 사용

Matplotlib Inset 그래프 삽입하기 - 기본 사용



예제2

import matplotlib.pyplot as plt
import numpy as np

plt.style.use('default')
plt.rcParams['figure.figsize'] = (6, 6)
plt.rcParams['font.size'] = 14

data = np.random.rand(100, 100)

fig, ax = plt.subplots()
ax.imshow(data, extent=(0, 100, 0, 100), origin='lower')

# Inset Graph
axins = ax.inset_axes([0.5, 0.5, 0.45, 0.45])
axins.imshow(data[10:20, 10:20], extent=(10, 20, 10, 20), origin='lower')

axins.set_xticklabels('')
axins.set_yticklabels('')

for axis in ['top', 'bottom', 'left', 'right']:
  axins.spines[axis].set_linewidth(3)
  axins.spines[axis].set_color('r')

plt.show()

axins.set_xticklabels(), axins.set_yticklabels()는 inset 그래프의 눈금 레이블을 지정합니다.

예제에서는 눈금 레이블이 표시되지 않도록 했습니다.

axins.spines[‘top’], axins.spines[‘bottom’], axins.spines[‘left’], axins.spines[‘right’]는 inset 그래프의 네 방향의 축입니다.

set_linewidth(), set_color()를 사용해서 선의 두께와 색상을 지정했습니다.

결과는 아래와 같습니다.


Matplotlib Inset 그래프 삽입하기 - 기본 사용 2

Matplotlib Inset 그래프 삽입하기 - 기본 사용 2





2) Inset 영역 표시하기

예제1

import matplotlib.pyplot as plt
import numpy as np

plt.style.use('default')
plt.rcParams['figure.figsize'] = (6, 6)
plt.rcParams['font.size'] = 14

data = np.random.rand(100, 100)

fig, ax = plt.subplots()
ax.imshow(data, extent=(0, 100, 0, 100), origin='lower')

# Inset Graph
axins = ax.inset_axes([0.5, 0.5, 0.45, 0.45])
axins.imshow(data[10:20, 10:20], extent=(10, 20, 10, 20), origin='lower')

axins.set_xticklabels('')
axins.set_yticklabels('')
for axis in ['top', 'bottom', 'left', 'right']:
    axins.spines[axis].set_linewidth(3)
    axins.spines[axis].set_color('r')

indicator = ax.indicate_inset_zoom(axins)

plt.show()

ax.indicate_inset_zoom(axins)axins에 표시되는 영역을 ax에 표시합니다.

결과는 아래와 같습니다.

다음 예제에서는 영역을 표시하는 사각형과 직선의 색상과 두께를 변경해 보겠습니다.


Matplotlib Inset 그래프 삽입하기 - inset 영역 표시하기

Matplotlib Inset 그래프 삽입하기 - inset 영역 표시하기



예제2

import matplotlib.pyplot as plt
import numpy as np

plt.style.use('default')
plt.rcParams['figure.figsize'] = (6, 6)
plt.rcParams['font.size'] = 14

data = np.random.rand(100, 100)

fig, ax = plt.subplots()
ax.imshow(data, extent=(0, 100, 0, 100), origin='lower')

# Inset Graph
axins = ax.inset_axes([0.5, 0.5, 0.45, 0.45])
axins.imshow(data[10:20, 10:20], extent=(10, 20, 10, 20), origin='lower')

axins.set_xticklabels('')
axins.set_yticklabels('')
for axis in ['top', 'bottom', 'left', 'right']:
    axins.spines[axis].set_linewidth(3)
    axins.spines[axis].set_color('r')

indicator = ax.indicate_inset_zoom(axins)

indicator[0].set_linewidth(3)
indicator[0].set_edgecolor('r')
indicator[0].set_color('r')

indicator[1][0].set_linewidth(3)
indicator[1][1].set_linewidth(3)
indicator[1][2].set_linewidth(3)
indicator[1][3].set_linewidth(3)

indicator[1][1].set_color('r')
indicator[1][2].set_color('r')

plt.show()

ax.indicate_inset_zoom(axins)는 그래프 상에 영역을 표시하는 사각형 (patches.Rectangle)과 직선 (patches.ConnectionPatch)을 튜플의 형태로 반환합니다.

indicator[0]는 영역을 표시하는 사각형 패치 (patches.Rectangle)입니다.

set_linewidth(), set_edgecolor(), set_color()를 사용해서 선의 두께와 색상 등을 지정했습니다.

indicator[1]는 연결선 패치 (patches.ConnectionPatch)입니다.

마찬가지로 set_linewidth(), set_color()를 사용해서 색상을 지정했습니다.

결과는 아래와 같습니다.


Matplotlib Inset 그래프 삽입하기 - inset 영역 표시하기 2

Matplotlib Inset 그래프 삽입하기 - inset 영역 표시하기 2



이전글