Matplotlib + Inkscape 으로 깔끔한 figure를 그리는 법을 정리한 것이다. Figure는 각자의 취항대로, 개성있게 그리되 전달하고자 하는 메시지만 오해 없이 잘 전달되게 하면 되지만, 만약 스타일이 고민된다면 아래 규칙대로 그리면 대부분은 일관된 Figure를 그릴 수 있다.
규칙
1.
(폰트의 크기) 폰트 크기는 모든 figure 요소에 대해서 무조건 7pt로 고정한다. 반드시 필요한 경우는 6pt~5.5pt 정도까지는 허용한다.
2.
(Figure의 크기) 폰트 크기를 1번 규칙에 맞춘 상태에서, figure 크기(plt.figure(figsize=(width, height)))를 잘 조절하여 적절한 크기로 만든다. Default: (1.5, 1.5)
3.
(폰트의 모양) Sans-serif 폰트를 쓴다. Arial / FreeSans / Helvetica 정도를 추천한다.
4.
(선의 굵기) Matplotlib 기준으로 0.75로 고정한다.
5.
(그림파일 저장) 그림파일은 항상 png와 pdf 버전으로 모두 저장한다. png는 발표 자료 등에 사용, pdf는 출판용 figure에 사용한다.
6.
(Source data 저장) Figure를 그리는 데 직접적으로 사용한 데이터는 figure와 함께 저장해둔다. 보통 figure와 같은 파일명을 쓰는 것이 좋다. 예) my_cool_figure.png → my_cool_figure.csv
7.
(Panel 라벨의 크기) Subfigure/panel의 라벨은 ‘Arial, 14pt, 굵게’로 설정한다. 이건 보통 Inkscape에서 작업한다.
참고 자료들
Figure 그릴 때 하면 안되는 행동들을 잘 정리해둔 GitHub repository이다. 커피 한 잔 하면서 슥 훑어보면 좋을 것이다.
중요 데이터를 강조하는 방법에 대한 글이다. 이 방법들은 과학 논문에는 적극적으로 쓰지는 않는 것이 좋겠지만…데이터 시각화의 목적을 생각하면서 읽어보자.
여기는 figure 구성에 대한 조언 뿐만 아니라 LaTEX 논문 작업 전반에 대한 유용한 팁들이 있으니 참고하면 좋다.
Matplotlib 기초 개념을 잘 정리한 글이다.
Python은 아니고, R + Inkscape를 이용하여 publication-quality figure를 그리는 방법을 정리한다.
Matplotlib 기본 설정
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
# If you want more customization
# see https://matplotlib.org/stable/tutorials/introductory/customizing.html
config = {
# Fonts.
'font.family': 'FreeSans',
'font.size': 7,
'axes.titlesize': 7,
'axes.titlepad': 5,
'axes.linewidth': 0.75,
# Figure sizes.
'figure.figsize': (1.5, 1.5),
'figure.subplot.wspace': 0.4,
'figure.subplot.hspace': 0.4,
# Legends.
'legend.frameon': False,
# Figure element aesthetics.
'lines.linewidth': 0.75,
'lines.markersize': 3,
'xtick.major.size': 2.5,
'xtick.major.pad': 2.5,
'ytick.major.size': 2.5,
'ytick.major.pad': 2.5,
'figure.dpi': 150,
}
plt.rcParams.update(config)
Python
복사
Matplotlib 및 시각화 기본
Matplotlib/Seaborn figure templates
간단한 figure는 pyplot 기본 메소드를 사용하되, 복잡한 figure의 경우는 주로 데이터를 pandas 데이터프레임으로 만든 뒤, seaborn을 이용해서 figure를 그린다.
Matplotlib troubleshooting
Figure를 그릴 때는 항상 예외가 발생한다. 주로 발생하는 문제들과 해결 방법을 정리해 두었다.
Inkscape 사용법
본인이 Adobe Illustrator를 구매해두었고, illustration을 그리거나, figure를 다듬고 배치하는 데 잘 사용할 수 있다면 당연히 그걸 쓰는게 좋다. Powerpoint도 좋은 대안이긴 하지만, 벡터 figure를 들여오고 내보내는 데에 애로사항이 많이 있으므로 나는 잘 사용하지 않는다. Inkscape는 기본적으로 vector graphics software라서 vector illustration을 손쉽게(?) 만들 수 있고, pdf나 svg 형식의 벡터 이미지들을 불러와서 비교적 자유롭게 편집할 수 있다는 장점이 있다.
내가 주로 사용하는 Inkscape를 활용한 전체적인 figure 편집 프로세스를 요약하면 다음과 같다.
1.
Matplotlib으로 figure 저장 시 항상 같은 figure를 png, pdf, eps 세 가지 형식으로 저장해 둔다. eps도 저장하는 이유는 외부 연구진과의 co-work 시 그들은 내부적으로 illustrator를 사용하는 경우가 더러 있어 eps 형식으로 figure를 전달해야하는 경우가 생기기 때문이다.
이를 위해서 아래의 save_figures 함수를 그냥 만들어놓고 plt.savefig이 들어갈 자리에 대신 사용한다.
def save_figures(f, exts=['png', 'pdf', 'eps']):
for ext in exts:
plt.savefig(f + f'.{ext}', dpi=300, bbox_inches='tight', transparent=True)
Python
복사
2.
Inkscape를 열고 pdf 형식의 figure를 불러온다. 파일을 그냥 드래그하면 불러와진다.
a.
여기서 주의할 점은, inkscape 내에서 절대 figure는 resizing하지 않는다는 것이다. 맨 위의 규칙을 잘 지켜놓고 여기서 resizing하면 말짱 꽝이다.
3.
각 panel을 구성하는 figure들을 적절히 배치한다. “정렬과 배분” (Ctrl + Shift + A)을 이용하면 손쉽게 딱딱 원하는 위치에 배치가 가능하다.
4.
Panel 라벨을 넣는다 (Arial, font size 14pt, 굵게).
설치
단축키
잘 익혀 두자. 많이 쓰는 순서대로 정렬해 두었다. 본인은 0.92.3 버전의 Inkscape를 쭉 사용하고 있어서, 최신 버전의 Inkscape에서는 작동하지 않는 단축키도 있을 수 있다.
이름 | 단축키 | 설명 |
선택 | F1 | 커서가 개체들을 선택할 수 있는 상태로 바뀐다. |
정렬과 배분 | Ctrl + Shift + A | 개체들을 정렬하거나, 등간격으로 맞추는 등 배치를 도와준다. |
채움과 윤곽선 | Ctrl + Shift + F | 개체 선의 굵기와 색을 조절한다. |
경로 만들기 | Shift + F6 | 직선 / 곡선을 그린다. |
경로 선택 / 수정 | F2 | 만든 경로 및 개체를 수정할 수 있다. |
글자 | F8 | 글씨를 쓸 수 있다. |
격자 켜기 | Shift + 3 (#) | 배경 안내선 격자를 켠다. |
격자에 붙이기 | Shift + 5 (%) | 개체들을 격자나 다른 개체의 꼭지점/변에 자석처럼 딱 붙게 한다. |
개체 색칠 | (개체 선택 중) 색 클릭 | 개체 내부 색을 칠한다. |
개체 윤곽선 색칠 | (개체 선택 중) Shift + 클릭 | 개체 윤곽선 색을 칠한다. |
사각형 | F4 | 사각형을 그린다. |
맨 뒤로/앞으로 보내기 | End/Home | 선택한 개체를 다른 모든 개체의 뒤로/앞으로 보낸다. |
한 수준 위로/아래로 | PgUp / PgDown | 선택한 개체를 한 수준 위로/아래로 봰ㄴ다. |
Inkscape tutorial
Inkscape로 다양한 그림을 그리는 법을 배워 보자.
예시 illustration/figure vector 파일들
연구실 생활동안 그린 vector illustration들을 갤러리 형식으로 정리해 두었다. 클릭해서 들어가면 svg 파일이 있으니 자유롭게 편집하여 사용하시길!
Search