Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Matplotlib 서브플롯 주위에 테두리(경계선) 그리는 방법

Matplotlib에서 서브플롯(subplot) 주위에 테두리를 그리고 싶다면 Rectangle 패치(patch)를 활용하면 됩니다. 이 방법은 특정 플롯 영역을 시각적으로 강조하거나 축의 경계를 명확하게 구분하고 싶을 때 유용합니다.

구현 단계

  • figure.figsize를 설정해 그림 크기를 지정하고, figure.autolayout으로 서브플롯 간 및 주변 여백을 자동으로 조정합니다.

  • subplot(121)을 사용해 현재 figure에 첫 번째 서브플롯을 추가합니다.

  • axis() 메서드로 해당 서브플롯의 축 좌표(xmin, xmax, ymin, ymax)를 가져옵니다.

  • 앵커 포인트 xy와 너비(width), 높이(height)를 지정하여 사각형을 정의합니다.

  • 앞 단계에서 얻은 축 정보를 바탕으로 현재 서브플롯에 사각형 패치를 추가합니다.

  • set_clip_on(False)를 호출해 아티스트가 클리핑되지 않도록 설정합니다.

  • subplot(122)를 사용해 두 번째 서브플롯을 추가합니다.

  • title() 메서드로 각 서브플롯의 제목을 설정합니다.

  • show() 메서드를 사용해 최종 그림을 화면에 표시합니다.

예제 코드

from matplotlib import pyplot as plt

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

sub = plt.subplot(121)
ax = sub.axis()
rec = plt.Rectangle((ax[0] - 0.7, ax[2] - 0.2), (ax[1] - ax[0]) + 1, (ax[3] - ax[2]) + 0.4, fill=False, lw=2, linestyle="dotted")

rec = sub.add_patch(rec)

rec.set_clip_on(False)
plt.title("with border")

sub = plt.subplot(122)
plt.title("without border")

plt.show()

핵심 포인트

코드에서 주목해야 할 부분은 다음과 같습니다:

  • 축 범위 확장: (ax[1] - ax[0]) + 1처럼 원래 축 범위보다 넓게 사각형을 정의하면 테두리가 플롯 데이터와 겹치지 않고 여유 있게 둘러싸게 됩니다.

  • fill=False: 사각형 내부를 채우지 않고 외곽선만 그려서 기존 그래프를 가리지 않습니다.

  • set_clip_on(False): 기본적으로 패치는 축 영역 내부에서만 표시됩니다. 클리핑을 비활성화해야 축 밖으로 확장된 테두리 전체가 화면에 나타납니다.

  • linestyle="dotted": 점선 스타일을 적용해 테두리를 더 부드럽게 표현할 수 있으며, 필요에 따라 실선(solid) 등 다른 스타일로 변경할 수 있습니다.

실행 결과

왼쪽 서브플롯에는 점선으로 된 테두리가 둘러싸여 있고, 오른쪽 서브플롯에는 테두리가 없습니다. 이렇게 두 결과를 나란히 비교하면 테두리 효과를 한눈에 확인할 수 있습니다.

Matplotlib 서브플롯 주위에 테두리(경계선) 그리는 방법