[연구 자동화 #40] 매번 맞추기 지치는 논문 그래프 규격, 파이썬 스타일시트로 한 번에 고정하는 법
논문 작성할 시기가 되면 데이터 분석보다 이게 더 발목을 잡는 일이 많습니다. 그건 바로 학술지마다 요구조건이 까다로운 '그래프 규격 맞추기'인데요, 어떤 학술지는 본문과 동일한 폰트를 요구하고, 어떤 곳은 1단의 너비를 몇 인치로 맞춰라 라고 제한합니다.
저 역시 예전에는 분석 코드 따로, 시각화 코드 따로 돌리며 매번 그래프를 그릴 때마다 폰트 크기와 선 두께를 수동으로 타이핑했습니다. 그러다 보니 논문에 들어갈 그림이 수십 장이 되었을 때, 어떤 그림은 글자가 크고 어떤 그림은 선이 얇아 스타일의 일관성이 없어보이는 실수를 많이 했습니다. 심사위원(Reviewer)에게 "그래프의 가독성이 떨어지고 통일감이 없다"는 지적을 받고 투고가 지연되기도 했습니다.
오늘 소개할 방법은 이러한 수동 작업과 실수를 원천 차단하는 기술입니다. 파이썬 Matplotlib의 '스타일시트(Style Sheet)' 기능을 활용하면, 코드 단 한 줄로 내가 원하는 학술지의 그래픽 가이드라인을 완벽하게 적용할 수 있습니다.
1. 엑셀의 흔적을 지우고 학술지 규격을 입히는 원리
우리가 흔히 쓰는 Matplotlib의 기본 그래프는 회색 배경이 들어가거나 선이 너무 얇아 학술 인쇄용으로는 적합하지 않습니다. 이를 해결하기 위해 많은 연구자가 코드 내부에 font.size나 두께를 지정하는 코드를 수십 줄씩 집어넣곤 합니다.
하지만 더 영리한 방법은 Matplotlib이 제공하는 rcParams 시스템을 파일 형태로 독립시키는 것입니다. 확장자가 .mplstyle인 텍스트 파일을 하나 만들어두고, 여기에 저널이 요구하는 폰트, 해상도(DPI), 축 테두리(Spine) 두께, 컬러 팔레트 등을 미리 정의해 놓는 방식입니다.
이렇게 하면 메인 분석 코드에는 오직 '데이터를 그리라는 명령'만 남겨둘 수 있습니다. 디자인 요소를 완전히 분리하기 때문에 코드가 깔끔해질 뿐만 아니라, 투고할 저널이 바뀌더라도 스타일시트 파일명만 교체하면 수십 개의 그래프 디자인이 0.1초 만에 바뀝니다.
2. 실전에서 바로 쓰는 학술지용 스타일시트 설계법
메모장이나 텍스트 에디터를 열고 academic.mplstyle이라는 이름으로 파일을 하나 생성한 뒤, 아래의 핵심 설정들을 입력해 둡니다. 이 설정은 Nature나 Elsevier 계열 저널에서 가장 권장하는 기본 가이드라인을 기준으로 표준화한 것입니다.
font.family: serif
font.serif: Times New Roman, DejaVu Serif
font.size: 9.0
axes.labelsize: 10.0
axes.titlesize: 11.0
axes.linewidth: 0.8
axes.grid: False
xtick.labelsize: 8.5
xtick.direction: in
xtick.major.size: 4
ytick.labelsize: 8.5
ytick.direction: in
ytick.major.size: 4
lines.linewidth: 1.2
lines.markersize: 4
savefig.dpi: 600
savefig.format: pdf
savefig.bbox: tight
이 설정 파일의 핵심 디테일은 틱(Tick)의 방향을 안쪽(in)으로 향하게 하고, 해상도를 인쇄용 표준인 600 DPI로 고정하며, 여백을 자동으로 잘라내 주는 tight 옵션을 기본값으로 지정했다는 점입니다. 이 파일을 분석 스크립트와 같은 폴더에 저장해 두는 것만으로 준비는 끝납니다.
3. 코드 한 줄로 완성하는 대량 그래프 시각화 자동화
스타일시트 파일이 준비되었다면, 파이썬 분석 코드 상단에 plt.style.use('./academic.mplstyle')라는 코드만 추가해 주면 됩니다. 실제로 여러 장의 실험 결과 그래프를 일관된 품질로 갱신하고 저장하는 실전 자동화 스크립트를 살펴보겠습니다.
import matplotlib.pyplot as plt
import numpy as np
# 1. 미리 만들어둔 학술지 전용 스타일시트 로드
plt.style.use('./academic.mplstyle')
# 가상의 실험 데이터 생성
time = np.linspace(0, 10, 100)
samples = {
'Sample_A': np.sin(time) + np.random.normal(0, 0.1, 100),
'Sample_B': np.cos(time) + np.random.normal(0, 0.1, 100)
}
# 2. 루프를 돌며 논문용 그래프 자동 생성 및 저장
for name, data in samples.items():
fig, ax = plt.subplots(figsize=(3.5, 2.8)) # 1단 너비 규격 (인치)
ax.plot(time, data, label=name, color='black') # 흑백 인쇄 고려
ax.set_xlabel('Time (s)')
ax.set_ylabel('Response (a.u.)')
ax.set_title(f'Experimental Result of {name}')
# 3. 고해상도 PDF로 자동 저장
plt.savefig(f'figure_{name}.pdf')
plt.close()
print("모든 논문용 그래프가 규격에 맞게 자동 저장되었습니다.")
4. 흑백 인쇄와 색맹 독자를 배려하는 고고도 팁
해외 저명 학술지 심사위원들이 은근히 점수를 높게 주는 포인트가 있습니다. 바로 '다양한 열람 환경에 대한 배려'입니다. 논문을 여전히 흑백으로 인쇄해서 읽는 연구자들이 많고, 색약이나 색맹을 가진 독자들도 존재합니다.
따라서 단순히 화려한 원색 팔레트를 쓰는 것은 좋지 않습니다. 스타일시트 내부에 axes.prop_cycle을 정의할 때, 명도 차이가 명확한 'Colorblind-friendly' 색상 조합(예: viridis)을 기본값으로 심어두거나, 선의 종류(linestyle)와 마커(marker)의 모양을 다르게 조합하는 루틴을 스크립트에 포함해야 합니다. 이러한 디테일이 구글이 말하는 '독창적이고 깊이 있는 콘텐츠'의 핵심이자, 논문의 품격을 높이는 차별화 요소가 됩니다.
5. 결론: 반복되는 수정을 막아주는 시스템의 힘
논문 심사 과정에서 그래프 수정 요청이 들어오면 대부분의 대학원생은 며칠 동안 밤을 새우며 그림을 다시 그립니다. 하지만 스타일시트 기반의 자동화 환경을 구축해 둔 연구자는 파일의 수치 몇 개만 바꾸고 파이썬 스크립트를 재실행하는 것으로 단 몇 분 만에 작업을 끝냅니다. 시간을 아끼는 것을 넘어, 실수를 원천적으로 방지하는 완벽한 시스템을 만드는 것. 이것이 가치 있는 연구 자동화의 본질입니다.
## 핵심 요약
- Matplotlib의 rcParams를 외부 스타일시트 파일(.mplstyle)로 분리하면, 분석 로직과 디자인 요소를 완전히 격리하여 코드의 재사용성을 극대화할 수 있습니다.
- 학술지 가이드라인에 맞춘 해상도(600 DPI), 폰트 종류, 인치 단위의 피규어 크기를 스타일시트에 고정함으로써 수십 장의 그래프에 완벽한 통일감을 부여합니다.
- 흑백 출력 및 색맹 독자를 고려하여 명도 차이가 확실한 컬러 사이클과 선 스타일을 선제적으로 적용하는 것이 고품질 시각화의 핵심입니다.
다음 편 예고: 41편에서는 텍스트와 표 뒤에 숨겨진 수많은 레퍼런스 논문들을 효율적으로 분석하기 위해, 파이썬으로 수백 편의 PDF 학술 자료에서 핵심 키워드와 데이터만 자동으로 추출하는 [학술 자료 텍스트 마이닝 기법]을 알아보겠습니다.
"논문 투고 시 그래프 가이드라인이나 폰트 규격 때문에 편집부로부터 수정 요청을 받았던 경험이 있으신가요? 여러분이 자주 투고하는 학술지의 규격 조건을 댓글로 공유해 주세요!"
댓글
댓글 쓰기