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

Matplotlib 백엔드 차이점 완벽 비교: Agg vs Cairo

Matplotlib는 다양한 백엔드(backend)를 지원하며, 어떤 백엔드를 선택하느냐에 따라 생성되는 이미지의 형식과 품질이 달라집니다. 이 글에서는 대표적인 두 가지 백엔드인 AggCairo의 차이점을 살펴보고, 실제 코드로 활용하는 방법까지 알아보겠습니다.

Agg와 Cairo 백엔드 비교

렌더러파일 형식설명
AGGpng래스터 그래픽 − Anti-Grain Geometry 엔진을 사용해 고품질 이미지를 생성합니다.
Cairopng, ps, pdf, svg래스터 또는 벡터 그래픽 − Cairo 라이브러리를 기반으로 다양한 형식을 지원합니다.

Agg는 PNG처럼 픽셀 기반의 래스터 이미지만 생성할 수 있지만, 안티앨리어싱 처리가 뛰어나 선명하고 고품질의 결과물을 제공합니다. 반면 Cairo는 PNG뿐만 아니라 PDF, PS(PostScript), SVG 같은 벡터 형식까지 지원하기 때문에 인쇄용 문서 제작이나 아무리 확대해도 깨지지 않는 이미지가 필요할 때 특히 유용합니다.

구현 단계

  • 그림(figure) 크기를 설정하고 서브플롯 사이 및 주변의 여백을 조정합니다.
  • 백엔드 이름을 "Agg"로 지정합니다.
  • NumPy를 사용해 5×5 크기의 행렬 배열을 생성합니다.
  • imshow() 메서드를 사용해 데이터를 2D 래스터 이미지 형태로 표시합니다.
  • savefig() 메서드로 그림을 파일로 저장합니다.

예제 코드

import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt

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

mpl.use("Agg")

data = np.random.rand(5, 5)
plt.imshow(data, interpolation='nearest', cmap="copper")
plt.savefig('agg.png')
참고: mpl.use()는 pyplot이 실제로 렌더링에 사용되기 전에 호출하는 것이 안전합니다. 스크립트 최상단에서 백엔드를 먼저 지정하면 백엔드 충돌 오류를 예방할 수 있습니다.

Cairo 백엔드를 사용하는 경우

Cairo 백엔드를 사용하려면 mpl.use("Cairo")로 변경한 뒤, 원하는 확장자(png, pdf, svg 등)로 저장하면 됩니다.

mpl.use("Cairo")

data = np.random.rand(5, 5)
plt.imshow(data, interpolation='nearest', cmap="copper")
plt.savefig('output.pdf')   # 벡터 형식으로 저장 가능

출력 결과

Matplotlib 백엔드 차이점 완벽 비교: Agg vs Cairo

정리하면, 웹 게시용 고화질 PNG 이미지가 필요하다면 Agg 백엔드를, PDF나 SVG처럼 확대해도 선명도가 유지되는 벡터 출력이 필요하다면 Cairo 백엔드를 선택하는 것이 좋습니다.