matplotlib 시작

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를 위와 같이 예쁘게 그리면 좋을 것 같습니다.

핑백

  • UUUUU : 논문 제출할 그림 준비하기 2011-10-10 21:12:49 #

    ... 장자로 그림을 만들어야 했죠. 저는 eps 확장자 그림을 얻기 위해 matplotlib/inkspace 조합을 쓰고 있습니다. (자세한 내용은 아래 글 참조)matplotlib 시작matplotlib and inkspace 둘 다 공짜인데 여러모로 유용합니다.matplotlib로 만든 파일을 수정하면 되기 때문에, 위치/ ... more

  • UUUUU : 2011년 내 이글루 결산 2011-12-31 12:40:09 #

    ... 글루스에서 1,560번째로 게시물을 가장 많이 작성하셨네요. 1위: KAIST(46회) | 학위 논문 작성중 2위: python(34회) | matplotlib 시작 3위: 물리(20회) | 물리학도라면 한번씩 경험했을 상황 4위: unix(19회) | UNIX tail 5위: 독서(17회) | 2 ... more

  • UUUUU : (Matplotlib) \rm과 \mathrm 2013-02-07 19:10:34 #

    ... . 그래서 다음과 같이 하면 된다. $a_{\mathrm{b}}$ Matplotlib가 무엇인지에 대해서는 이전 글 참조.[1] [1] UUUUU, matplotlib 시작 ... more

덧글

  • 바죠 2011/07/14 08:59 #

    저는 통상, PNG, EPS로 동시에 뽑습니다. 하나는 ppt하나는 tex에서 불러들일 용도로 그렇게 합니다.

    아무튼, matplotlib는 많은 것들을 제공하는 것임에 틀림이 없습니다. 제일 편리한것으로 알려진 matlab그림그리기 수준을 목표로 했었다는 저자의 말이 기억에 남습니다.
    잘 아시는것처럼 matlab은 유료 소프트웨어입니다.

    통상의 2D 그림은 xmgrace에 의존하고 있습니다.

    과거 랩마다 자신들의 고유한 소프트웨어를 가지고 있는 경우가 있었는데, 아주 수준 높고 고유 스타일있는 것으로 바라 볼 수 있습니다.

  • wolga 2011/07/14 11:48 #

    코멘트 감사합니다. 꽤 오래 쓰셨는데 그렇게 하신다면 이유가 있는 거겠지요, 저도 두 확장자로 뽑아둬야겠습니다.

    연구실 소프트웨어도 매우 훌륭하다고 생각합니다. 제가 제가 matplotlib를 알아보게 된 것은 연구실 소프트웨어의 경우에 잘 이어지지 못해 필요할 때 못쓰는 경우가 있었기 때문입니다.
  • wolga 2011/07/14 11:50 #

    개인적으로 matplotlib의 강점은 (1) 데이터를 바로 수정할 수 있는 점과 (2) 함수를 입력해서 집어넣을 수 있다는 점이 아닐까 합니다. 기존에 제가 써왔던 무료 도구들에서는 (1)과 (2)가 되지 않았습니다. MATLAB 수준이 되겠다는 저자의 말을 여기서도 강조할만 하다고 봅니다. xmgrace는 제가 써보지 않아서 어떨지 모르겠습니다.
  • 바죠 2011/07/14 13:40 #

    그림을 예쁘게 그리는 방법중 하나는 여러 가지 소프트웨어를 각각 이용한 다음 하나의 그림에 다시 배치하는 방식입니다. 어떠한 소프트웨어도 한 방에 구성진 그림을 그릴 수는 없을것입니다. 그런데, xfig (linux)같은 프로그램을 사용하면 사용자의 의도대로 그림들을 배치해서 하나의 그림을 만들 수 있습니다.

    예를 들어, 1.eps, 2.eps, 3.eps처럼 그림을 각각 준비한다음, xfig에서 각각을 불러 들여서 새롭게 배치합니다. 확대/축소가 가능합니다. 추가로 글자, 선, 도형등을 넣어줄 수 있습니다. 그 다음, 하나의 eps파일로 저장해 버립니다.

  • wolga 2011/07/14 15:18 #

    옳으신 말씀입니다. 저는 Photoshop을 주로 이용했었는데, xfig도 배워봄직해보이네요, 시간이 나면 시도해보겠습니다:)
※ 로그인 사용자만 덧글을 남길 수 있습니다.