무효 클릭 IP 추적 중...
머신러닝,딥러닝/matplotlib 시각화

[matplotlib 기초] subplot2grid를 활용한 커스터마이징

꼬예 2021. 7. 16.

matplotlib 에서는 figure를 그리는 다양한 방법이 있죠 이번 포스팅에서는 subplot2grid에 대해서 알아보도로 하겠습니다.

 

subplot2grid를 왜 굳이 사용해야 하냐? 라고 물으신다면 ..

위와 같이 불규칙한 형태의 figure들을 그릴때 편리하기 때문입니다. 

 

 

우선 가장 간단한 형태부터 알아봅시다!

subplot2grid의 기본 형태

import matplotlib.pyplot as plt
fig_set = plt.figure(facecolor='linen')

ax1 = plt.subplot2grid((2,1), (0,0), fig= fig_set) # plt.sub~ 이고 fig = 에 넣어줌..
ax2 = plt.subplot2grid((2,1), (1,0), fig= fig_set)

다른 method들과 다르게 모양이 좀 특이하니 주의하셔야 합니다.

plt.figure() 로 만든 객체를 plt.subplot2grid안에 있는 fig 인자에 넣게 됩니다.

 

첫번째 인자와 두번째 인자는 튜플 형태로 지정을 하는데, 첫번째 인자는 전체 figure의 shape을 의미하고, 두번째 인자는 해당 전체 shape에서 해당 axes가 어느 위치에 있는지를 의미합니다.

 

위 코드에서 첫번째 인자인 (2,1)은 두개의 행과 하나의 열로 이루어진 figure 라는 의미이고,

ax1의 두번째인자는 (0,0)임으로  파란색 사각형 위치, ax2는 (0,1) 이니까 빨간색 위치에 놓이게 됩니다.

 

subplot2grid로 복잡한 figure 그리기

이제 대충 느낌을 알았으니 인트로에서 보여드렸던 figure을 그리는 법에 대해서 알아보겠습니다.

자, 먼저 subplot2grid의 첫번째 인자로는 전체 shape을 넣어야 된다고 말씀드렸습니다.

이 그림의 전체 shape은 무엇일까요?

앞선 예에서 (2,1) 처럼 바로 정답이 나오지 않으시죠?

 

add_subplot과 마찬가지로 전체 shape은 가장 작은 사각형을 기준으로 shape을 정하게 됩니다. 

즉 이 그림의 shape은 (3,3)인 것이지요.

 

그렇다면 첫번째 ,두번째 기다란(?) 사각형의 위치는 뭐라고 말해야할까요?

해당 사각형의 시작점을 말해주시면 됩니다.

즉 제일 위에 있는 사각형은 (0,0), 두번째 에 위치한 사각형은 (1,0)이 됩니다. 

 

그후 colspan이라는 argument를 통해 우리가 원하는 만큼 옆으로 늘려주면 됩니다.

 

코드를 통해 다시한번 알아보시죠!

fig_set = plt.figure(facecolor='linen')

ax1 = plt.subplot2grid((3,3), (0,0), 
                       colspan=2, # 0,0 에서 시작하는데 컬럼 2칸을 차지하겠다.
                       fig= fig_set)

ax2 = plt.subplot2grid((3,3), (1,0), 
                       colspan=3, # 1,0 에서 시작하는데 컬럼 3칸을 차지하겠다.
                       fig= fig_set)

ax3 = plt.subplot2grid((3,3),(2,0),
                      fig=fig_set)

ax4 = plt.subplot2grid((3,3), (2,1),
                      fig=fig_set)

ax5 = plt.subplot2grid((3,3), (2,2),
                      fig= fig_set)

colspan을 이용해서 전체 shape 3칸을 기준으로 2만큼 늘리고 싶다면 colspan = 2를 

3만큼 늘리고 싶다면 colspan = 3을 적어 주면 됩니다. 

output :

 

그렇다면 아래와 같은 그림은 어떻게 그릴까요?

잠시 고민해보시고 답을 확인하시기 바랍니다.

fig_set = plt.figure(facecolor='linen')

ax1 = plt.subplot2grid((3,3), (0,1), 
                       colspan=2, 
                       fig= fig_set)

ax2 = plt.subplot2grid((3,3), (1,0), 
                       colspan=3, 
                       fig= fig_set)

ax3 = plt.subplot2grid((3,3),(2,0),
                      fig=fig_set)

ax4 = plt.subplot2grid((3,3), (2,1),
                      fig=fig_set)

ax5 = plt.subplot2grid((3,3), (2,2),
                      fig= fig_set)

앞서 말씀드렸듯이 시작점을 확인하셔야 합니다. 첫번째 사각형의 시작점은 (0,1) 입니다. 

그리고 2개만큼 늘렸으니까 colspan =2 를 적어주면 되죠.

 

 

colspan이 있다면 rowspan은 없나라고 궁금하신 분들이 있으셨을텐데요. 당연히 있습니다. 

위 그림과 같이 제일 오른쪽에 있는 figure가 아래로 쭉 늘어나 있는 형태인데요. 이때 row span을 사용합니다.

 

우선,

머리속에서 가장 작은 형태의 사각형을 상상하시고 전체 shape이 무엇일까를 예측해보세요

(1,1) 짜리 정사각형이 (3,3) 형태로 있겠다라는걸 예측 하실수 있을겁니다.

즉 전체 shape은 (3,3)이고 이 작은 사각형들을 옆으로 또는 위아래로 늘려주면 됩니다.

 

fig = plt.figure(figsize=(7,7),
                 facecolor='linen')

ax1 = plt.subplot2grid((3,3),(0,0),
                      colspan=2,
                      fig=fig)
ax2 =  plt.subplot2grid((3,3),(1,0),
                      colspan=2,
                      fig=fig)
ax3 =  plt.subplot2grid((3,3),(2,0),
                      colspan=2,
                      fig=fig)
ax4 =  plt.subplot2grid((3,3),(0,2),
                      rowspan=3,
                      fig=fig)

ax1, ax2, ax3 은 앞에서 다루었으니 rowspan이 추가된 ax4를 기준으로 설명 드리겠습니다. 

작은 사각형의 시작점이 (0,2) 인걸 우선 확인하셔야합니다. 

그후 내가 늘릴만큼을 정해주는데 이번에는 아래 방향으로 3만큼 늘려줄것이기 때문에 

rowspan=3을 기입하면 우리가 원하는 형태를 만들 수 있습니다.

 

👉 쥬피터노트북에 chatgpt 적용 하기

 

  • 트위터 공유하기
  • 페이스북 공유하기
  • 카카오톡 공유하기
이 컨텐츠가 마음에 드셨다면 커피 한잔(후원) ☕

댓글