Matplotlib에서는 축(axes)을 생성한 이후에도 서브플롯의 크기나 위치를 자유롭게 조정할 수 있습니다. GridSpec 클래스를 활용하면 그리드 기반 레이아웃을 정의하고, 이미 만들어진 축의 위치를 동적으로 변경할 수 있습니다.
구현 단계
- figure() 메서드를 사용해 새 figure를 생성하거나 기존 figure를 활성화합니다.
- add_subplot() 메서드로 서브플롯 형태의 '~.axes.Axes'를 figure에 추가합니다.
- GridSpec() 클래스를 사용해 figure 내부에 서브플롯을 배치할 그리드 레이아웃을 정의합니다.
- 그리드 스펙(grid spec)의 위치를 설정합니다.
- set_subplotspec()으로 subplotspec 인스턴스를 지정합니다.
- gridspec 인스턴스와 함께 add_subplot() 메서드를 사용해 새로운 축을 추가합니다.
- 서브플롯 사이 및 주변의 여백(padding)을 조정합니다.
- show() 메서드로 figure를 화면에 표시합니다.
예제 코드
from matplotlib import pyplot as plt from matplotlib import gridspec as gridspec plt.rcParams["figure.figsize"] = [7.00, 3.50] plt.rcParams["figure.autolayout"] = True fig = plt.figure() ax = fig.add_subplot(111) gs = gridspec.GridSpec(3, 1) ax.set_position(gs[0:2].get_position(fig)) ax.set_subplotspec(gs[0:2]) fig.add_subplot(gs[2]) fig.tight_layout() plt.show()
코드 설명
위 예제에서는 먼저 add_subplot(111)으로 하나의 축을 생성한 뒤, 세 개의 행(row)을 가지는 GridSpec 객체를 만듭니다. 그다음 gs[0:2] 즉, 첫 번째와 두 번째 행 전체를 차지하도록 기존 축의 위치를 재설정하고, 마지막 세 번째 행에는 새로운 서브플롯을 추가합니다. 결과적으로 위쪽 서브플롯이 아래쪽 서브플롯보다 두 배 큰 세로 공간을 차지하는 레이아웃이 완성됩니다.
출력 결과

이 방식은 대시보드나 복잡한 시각화 레이아웃에서 특정 플롯의 비율을 유동적으로 조정해야 할 때 매우 유용합니다. 특히 실행 중간에 레이아웃을 변경해야 하는 상황에서도 코드 수정 없이 축의 위치만 간단히 갱신할 수 있다는 점이 큰 장점입니다.