Matplotlib에서 그림 크기 완전 정복: 종합 가이드
Updated on
Matplotlib에서 그림(figure) 크기를 컨트롤하는 것은 깔끔하고 읽기 쉬우며, 논문·보고서에 적합한 고품질 시각화를 만드는 데 가장 중요한 요소 중 하나입니다. 빠른 탐색용 플롯을 만들든, 보고서용으로 정교하게 다듬은 그림을 만들든, 그림 크기를 제대로 설정·조정하는 방법을 알면 왜곡된 차트, 읽기 어려운 레이블, 들쭉날쭉한 레이아웃에서 벗어날 수 있습니다.
이 가이드는 Matplotlib에서 그림 크기를 제어하는 모든 일반적·실용적 방법을 다룹니다:
- 새 그림을 만들 때
figsize사용 - 이미 생성된 그림 크기 조정
rcParams를 사용한 전역 기본값 설정- 센티미터(cm) 단위로 그림 크기 설정
- Pandas 플롯에서 크기 변경
- 전역 크기 기본값 리셋 및 동적 변경
- 트러블슈팅 가이드
- 모든 방법을 정리한 비교 표
⭐ TL;DR — 빠른 레퍼런스
| 작업 | 가장 적합한 방법 | 예시 |
|---|---|---|
| 새 그림의 크기 설정 | plt.figure(figsize=(w, h)) | plt.figure(figsize=(8, 6)) |
| 존재하는 그림의 크기 변경 | fig.set_size_inches(w, h) | fig.set_size_inches(12, 4) |
| 전역 기본 크기 설정 | plt.rcParams["figure.figsize"] = ... | (12, 6) |
| Pandas 플롯에서 크기 설정 | df.plot(figsize=(w, h)) | (10, 5) |
| 센티미터 사용 | cm → inch 변환 | w_cm / 2.54 |
Matplotlib에서 그림 크기 이해하기
Matplotlib은 그림 크기를 (width, height) 튜플 형태의 인치(inch) 단위로 다룹니다.
고정 크기의 그림을 만드는 가장 직접적인 방법은 다음과 같습니다:
from matplotlib.pyplot import figure
# 폭 8인치, 높이 6인치인 새 그림 생성
figure(figsize=(8, 6))이렇게 하면 데이터셋이나 플롯 타입과 상관없이, 지정한 크기를 그대로 사용하는 그림을 만들 수 있습니다.
이미 존재하는 그림의 크기 조정하기
plt.plot() 이나 Pandas 플롯처럼, 그림이 자동으로 생성되는 경우도 있습니다. 이때도 나중에 크기를 변경할 수 있습니다:
import matplotlib.pyplot as plt
# 현재 활성화된 figure 가져오기
fig = plt.gcf()
# 크기를 18.5 x 10.5 인치로 변경
fig.set_size_inches(18.5, 10.5)
# 크기 변경 후 저장
fig.savefig("figure.png", dpi=100)set_size_inches()는 그림이 이미 생성된 이후에 크기를 변경하는 가장 신뢰할 수 있는 방법입니다.
rcParams로 전역 기본 그림 크기 설정하기
모든 플롯이 동일한 크기를 따르도록 하고 싶다면(노트북이나 스크립트에서 유용), 전역 기본값을 설정할 수 있습니다:
import matplotlib.pyplot as plt
# 이후 생성될 모든 그림을 20 x 3 인치로 설정
plt.rcParams["figure.figsize"] = (20, 3)이 설정은 이후에 생성되는 모든 플롯에 적용되며, 다른 설정으로 덮어쓸 때까지 유지됩니다.
센티미터 단위로 그림 크기 설정하기
논문이나 보고서처럼 미터법을 요구하는 경우, 센티미터를 인치로 변환해서 사용하면 됩니다:
width_cm = 20
height_cm = 10
# cm를 인치로 변환
width_in = width_cm / 2.54
height_in = height_cm / 2.54
# 변환한 크기를 사용
figure(figsize=(width_in, height_in))이 방식은 인치 기반 접근과 완전히 동일하게 동작합니다.
전역 기본값 리셋 또는 동적으로 변경하기
Matplotlib의 원래 기본 설정으로 되돌리려면 다음과 같이 합니다:
plt.rcParams["figure.figsize"] = plt.rcParamsDefault["figure.figsize"]하나의 노트북에서 작은 빠른 플롯과, 논문용 큰 플롯을 섞어서 사용할 때 특히 유용합니다.
Pandas에서 그림 크기 제어하기
Pandas는 Matplotlib과 바로 연동되며, figsize 인자를 그대로 사용할 수 있습니다:
df['some_column'].plot(figsize=(10, 5))서브플롯과 함께 사용할 수도 있습니다:
fig, ax = plt.subplots(figsize=(10, 5))
df['some_column'].plot(ax=ax)이 방법은 데이터 분석 노트북에서 특히 편리합니다.
모든 플롯에 대해 Matplotlib 기본 그림 크기 바꾸기
모든 플롯이 자동으로 동일한 크기로 생성되도록 하려면 다음을 사용할 수 있습니다:
import matplotlib
matplotlib.rc("figure", figsize=(10, 5))이는 rcParams를 직접 수정하는 것과 유사하며, 스크립트와 노트북 전반에 걸쳐 적용됩니다.
🔍 모든 방법 비교
| 방법 | 언제 사용할까? | 비고 |
|---|---|---|
figure(figsize=...) | 새 그림을 만들 때 | 가장 일반적으로 추천 |
set_size_inches() | 이미 생성된 그림 크기를 바꿀 때 | 자동 생성된 플롯에 유용 |
plt.rcParams["figure.figsize"] | 노트북 내부에서 전역 기본 크기를 정할 때 | EDA에서 가장 자주 사용 |
matplotlib.rc("figure", figsize=...) | 스크립트에서 전역 기본 크기를 설정할 때 | 프로덕션 코드에 적합 |
| 센티미터 변환 | 학술 논문, 출판사 규격을 맞출 때 | LaTeX 논문용 등 |
df.plot(figsize=...) | Pandas 워크플로우에서 사용할 때 | 빠른 EDA에 매우 편리 |
⚠️ 트러블슈팅: figsize가 안 먹히는 것처럼 보일 때 (자주 발생하는 문제)
1. Jupyter Notebook에서 figsize가 무시되는 것 같을 때
다음 매직 커맨드를 사용해 보세요:
%matplotlib inline2. tight layout 때문에 레이블이 잘려 나갈 때
다음으로 자동 레이아웃 조정을 적용합니다:
plt.tight_layout()3. 그림을 저장할 때 크기가 달라 보일 때
항상 DPI를 명시적으로 설정하세요:
plt.savefig("output.png", dpi=150)4. 폰트나 레이블 크기가 예상과 다르게 스케일될 때
자동 레이아웃 스케일링을 끄는 방법입니다:
plt.rcParams['figure.autolayout'] = False5. 서브플롯이 서로 겹칠 때
그림 크기를 키우면 도움이 됩니다:
fig, ax = plt.subplots(figsize=(12, 8))이러한 트러블슈팅 항목들은 Matplotlib 관련 검색에서 상위에 노출되는 주제이자, 사용자들이 자주 겪는 실질적인 불편을 해결해 줍니다.
Matplotlib의 대안: PyGWalker로 데이터 시각화하기
Matplotlib 외에도, PyGWalker를 사용하면 pandas DataFrame을 드래그 앤 드롭 방식으로 손쉽게 탐색할 수 있습니다. PyGWalker는 오픈 소스 데이터 시각화 도구입니다:
Jupyter 안에서 사용하기:
pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)또는 온라인에서 바로 사용해 볼 수도 있습니다:
자주 묻는 질문 (FAQ)
-
Matplotlib에서 그림 크기를 어떻게 설정하나요?
figure(figsize=(width, height))를 사용합니다. -
이미 생성된 그림의 크기를 바꾸려면 어떻게 하나요?
fig.set_size_inches(w, h)메서드를 사용합니다. -
Pandas 플롯에서도 그림 크기를 바꿀 수 있나요?
네,figsize=(w, h)인자를 사용하면 됩니다.
