본문 바로가기
데이터 분석/시각화

[Matplotlib] fill_between을 이용하여 두 곡선 사이 영역 색칠하기

by 부자 꽁냥이 2022. 5. 24.

안녕하세요~ 꽁냥이에요. 라인 차트를 그리다 보면 두 곡선 사이 영역을 색칠하여 강조하고 싶을 때가 있지요. 이를 위해 Matplotlib에서는 fill_between을 제공하고 있어요.

 

이번 포스팅에서는 fill_between을 이용하여 두 곡선 사이의 영역을 색칠하는 방법에 대해서 알아보겠습니다.


   fill_between 사용법

- 한 곡선과 x축 사이 영역 -

fill_between에는 첫 번째 인자는 x좌표를 결정할 배열과 y값에 대한 배열을 기본적으로 지정하게 되어 있어요. 이는 y값과 x축 사이에 있는 영역을 색칠하게 됩니다.

 

import matplotlib.pyplot as plt
plt.rcParams['axes.unicode_minus'] = False
import numpy as np

num_sample = 10
np.random.seed(0)
y = 10*np.random.rand(num_sample)
x = range(num_sample)
np.random.seed(2)
upper_y = y+3*np.random.rand(num_sample)
fig = plt.figure(figsize=(7,7))
fig.set_facecolor('white')

plt.fill_between(x,upper_y, color='green', alpha=0.5) # upper_y와 x축 사이의 영역을 색칠

plt.show()

 

fill_between 결과

- 두 곡선 사이 영역 -

이번엔 두 곡선 사이의 영역을 색칠해보겠습니다. fill_between 세 번째 인자를 하나 더 추가하면 됩니다. 여기서는 edgecolor를 이용해 테두리를 추가했습니다.

 

num_sample = 10
np.random.seed(0)
y = 10*np.random.rand(num_sample)
x = range(num_sample)
np.random.seed(1)
lower_y = y-3*np.random.rand(num_sample)
np.random.seed(2)
upper_y = y+3*np.random.rand(num_sample)
fig = plt.figure(figsize=(7,7))
fig.set_facecolor('white')

plt.fill_between(x,lower_y, upper_y, color='green', edgecolor='k', alpha=0.5)

plt.show()

 

- x 범위 설정 -

fill_between은 where라는 인자를 통해 색칠할 영역의 x 범위를 지정할 수 있습니다. 이때 x축 표시 범위와 y축 표시 범위를 set_xlim, set_ylim을 통해 고정시켰습니다. 

 

np.random.seed(0)

num_sample = 10
y = 10*np.random.rand(num_sample)
x = np.array(range(num_sample))
np.random.seed(1)
lower_y = y-3*np.random.rand(num_sample)
np.random.seed(2)
upper_y = y+3*np.random.rand(num_sample)
fig = plt.figure(figsize=(7,7))
fig.set_facecolor('white')

plt.fill_between(x,lower_y, upper_y, where=(x>=2)&(x<=5),
                 color='green', alpha=0.5)

plt.xlim(min(x), max(x))
plt.ylim(min(lower_y), max(upper_y))
plt.show()

 


이번 포스팅에서는 두 곡선 사이의 영역을 칠하는 방법을 알아보았습니다. 이 방법은 한 곡선과 이에 대한 상한, 하한 곡선을 같이 그릴 때 유용하게 사용할 수 있어요. 부디 많은 분들에게 도움이 되시길 바라며 이상 포스팅 마치겠습니다. 감사합니다.


댓글


맨 위로