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

Matplotlib에서 여러 그래프를 하나의 PDF 파일로 저장하는 방법

데이터 분석이나 리포트 작업을 하다 보면 생성한 여러 개의 그래프를 하나의 PDF 파일에 한꺼번에 저장해야 하는 경우가 많습니다. Matplotlib에서는 PdfPages 클래스를 활용하면 이를 손쉽게 처리할 수 있습니다.

이 글에서는 두 개의 그림(figure)을 각각 생성한 뒤, 하나의 PDF 파일로 합쳐서 저장하는 전체 과정을 단계별로 살펴보겠습니다.

구현 단계

  • 그림 크기를 설정하고 서브플롯(subplot) 주변과 사이의 패딩(padding)을 조정합니다.

  • figure() 메서드를 사용해 새로운 첫 번째 그림(fig1)을 생성하거나 기존 그림을 활성화합니다.

  • plot() 메서드로 첫 번째 선 그래프를 그립니다.

  • 같은 방식으로 두 번째 그림(fig2)을 생성합니다.

  • plot() 메서드로 두 번째 선 그래프를 그립니다.

  • PDF 파일 이름을 저장할 변수 filename을 초기화합니다.

  • 여러 이미지를 하나의 PDF에 저장하는 사용자 정의 함수 save_multi_image()를 작성합니다.

  • 파일 이름을 인자로 전달하며 save_multi_image() 함수를 호출합니다.

  • 함수 내부에서 새로운 PdfPages 객체를 생성합니다.

  • 현재 열려 있는 그림의 개수를 확인합니다.

  • 열려 있는 모든 그림을 반복(iterate)하면서 PDF 파일에 순서대로 저장합니다.

  • 모든 저장이 끝나면 PDF 객체를 닫아(close) 파일을 완성합니다.

예제 코드

from matplotlib import pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages

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

# 첫 번째 그림 생성 및 빨간색 선 그리기
fig1 = plt.figure()
plt.plot([2, 1, 7, 1, 2], color='red', lw=5)

# 두 번째 그림 생성 및 초록색 선 그리기
fig2 = plt.figure()
plt.plot([3, 5, 1, 5, 3], color='green', lw=5)


def save_multi_image(filename):
    """열려 있는 모든 그림을 하나의 PDF 파일에 저장합니다."""
    pp = PdfPages(filename)
    fig_nums = plt.get_fignums()          # 열린 그림의 번호 목록
    figs = [plt.figure(n) for n in fig_nums]  # 그림 객체 가져오기
    for fig in figs:
        fig.savefig(pp, format='pdf')     # 각 그림을 PDF에 저장
    pp.close()                            # PDF 객체 닫기


filename = "multi.pdf"
save_multi_image(filename)

핵심 포인트 설명

  • plt.get_fignums(): 현재 메모리에 열려 있는 모든 그림의 고유 번호를 리스트로 반환합니다. 이 덕분에 그림 개수와 상관없이 코드를 재사용할 수 있습니다.

  • PdfPages(filename): 여러 페이지를 담을 수 있는 PDF 문서 객체를 만듭니다. 일반적인 savefig()와 달리, 하나의 파일에 계속 페이지를 추가할 수 있습니다.

  • fig.savefig(pp, format='pdf'): PdfPages 객체를 저장 대상으로 지정하면 해당 그림이 PDF의 새 페이지로 추가됩니다.

  • pp.close(): 반드시 호출해야 실제로 파일이 디스크에 완전히 기록됩니다. 누락하면 손상된 PDF가 생성될 수 있습니다.

실행 결과

위 코드를 실행하면 프로젝트 디렉터리에 multi.pdf라는 PDF 파일이 생성되며, 다음과 같은 두 개의 그래프가 각각 한 페이지씩 저장됩니다.

Matplotlib에서 여러 그래프를 하나의 PDF 파일로 저장하는 방법

Matplotlib에서 여러 그래프를 하나의 PDF 파일로 저장하는 방법

이 방식은 그림이 몇 개든 자동으로 처리되므로, 실험 결과를 한 문서로 정리하거나 대량의 차트를 효율적으로 아카이빙할 때 매우 유용합니다.