tplo논문에 들어갈 그림은 무조건 예뻐야 합니다. 이 문장은 연구자라면 거의 대부분 동의하시겠지요.




지금까지 두 논문을 썼지만, 모두 다 연구실에서 쓰는 프로그램을 썼습니다. 그런데 졸업하고 나서도 그 프로그램을 쓰리란 보장이 없지요. 거기다 UNIX에서 돌아가는 프로그램이라, 졸업하고 나서 쓰기에 다소 걱정스러운 면이 있었습니다. 그래서 윈도우즈에서 무료로 쓸 수 있는 환경을 구축하기로 마음먹었지요.
그러다가 matplotlib를 찾았습니다. [1] 바죠님 블로그에서 발견했습니다.[2,3]
예제들을 보면 꽤 예쁩니다.[4] 거기다 Python 에서 명령어를 쳐야 하는지도 제공하고 있습니다. 따라서 원하는 그림이 있을 때 가져다 쓸 수 있으리라 봅니다.
전 Python 2.7을 깔았습니다. 3 이상을 제공하지 않더군요. Numpy는 Python에 맞게 깔았구요.
예제로 제공되는 것을 한 번 돌려봤습니다.

그랬더니 이렇게 창이 하나 뜹니다.

바탕색이 회색이라 마음에 안 드실 수도 있겠습니다. 그런데 eps로 뽑아봤더니 전혀 문제가 없습니다. 아래는 eps로 출력한 그림 파일을 gsview로 본 것입니다. 바탕이 하얗게 나오는 것을 알 수 있습니다.

그 외에도 다양한 포맷이 지원됩니다.(pdf, ps, png 등) 그런데 저는 TeX으로 논문 쓰는 경우가 많아서 eps로 출력하는 일이 잦을 것 같습니다.
사실 위와 같이 하지 않아도 됩니다. 코드 긁어다가 py 확장자로 저장, 실행만 하면 알아서 그림이 뜹니다. 저는 아마 Notepad++로 작업하고, 더블클릭으로 실행시켜서 그림 띄우지 않을까 싶습니다.
시범삼아 band structure를 그려봤습니다.
크기는 창 띄우고 나서 조절해야 합니다. 이건 좀 귀찮군요. 설정할 수 있는지 찾아봐야겠습니다.

코드는 다음과 같습니다. (최적화되어 있지 않습니다.)
-------------------------------------------------------------
import numpy as np
from pylab import *
import matplotlib.pyplot as plt
g = open('band.txt')
buffer = g.readlines()
x = []
y = []
for i in xrange(len(buffer)):
temp = buffer[i].split()
x.append(temp[0])
y.append(float(temp[1])+2.4)
plt.figure(1)
plt.plot(x, y, 'bo')
plt.ylim(-3,2)
plt.xlim(1,10)
xlabel('k-point',size=16) #title('title', color='r')
ylabel('Energy (eV)')
title('Band structure')
#grid(True)
plt.draw()
plt.show()
-------------------------------------------------------------
앞으로 틈틈히 그려봐야겠습니다. local density of states를 위와 같이 예쁘게 그리면 좋을 것 같습니다.
덧글
아무튼, matplotlib는 많은 것들을 제공하는 것임에 틀림이 없습니다. 제일 편리한것으로 알려진 matlab그림그리기 수준을 목표로 했었다는 저자의 말이 기억에 남습니다.
잘 아시는것처럼 matlab은 유료 소프트웨어입니다.
통상의 2D 그림은 xmgrace에 의존하고 있습니다.
과거 랩마다 자신들의 고유한 소프트웨어를 가지고 있는 경우가 있었는데, 아주 수준 높고 고유 스타일있는 것으로 바라 볼 수 있습니다.
연구실 소프트웨어도 매우 훌륭하다고 생각합니다. 제가 제가 matplotlib를 알아보게 된 것은 연구실 소프트웨어의 경우에 잘 이어지지 못해 필요할 때 못쓰는 경우가 있었기 때문입니다.
예를 들어, 1.eps, 2.eps, 3.eps처럼 그림을 각각 준비한다음, xfig에서 각각을 불러 들여서 새롭게 배치합니다. 확대/축소가 가능합니다. 추가로 글자, 선, 도형등을 넣어줄 수 있습니다. 그 다음, 하나의 eps파일로 저장해 버립니다.