![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
한글판 johnsonj 2008.06.17 화 matplotlib 사용법파이썬 초보라면 파이썬 자습서와 numpy 자습서를 보신후에 matplotlib으로 작업하시기를 권장한다. 그렇지 않으면 좌절할 수도 있다. 두 기술에 익숙하다면, matplotlib가 쉬울 것이다.matplotlib의 뚜껑을 열어 보면 수 많은 특징이 있다. 이 자습서는 표면만을 훓어본다. 이 자습서를 숙지하고 나면, 다음 단계는 (물론, 다름 아닌 자신만의 그림을 그리는 작업에 들어가는 것인데) 소스(*.tar.gz or *.zip)를 내려받아 matplotlib 예제 디렉토리를 훓어 보는 것이다. 날짜 도표 작업을 하고 있다면 여러 날짜 데모가 있을 것이다. 이름에 examples/date_demo1.py와 같이 힌트가 있다. 마찬가지로 이미지 데모를 찾고 있다면 examples/image_demo.py가 있을 것이고, 등고선 데모가 필요하다면 examples/contour_demo.py가 있다. 그래픽 사용자 인터페이스와 함께 matplotlib를 사용하는 방법은 examples/embedding_in_wx.py에 있으며 등등 수 없이 많다. 이 예제들은 표준 윈도우즈 설치기에 포함되어 있지 않으므로, 종종 간과되는데, 그 때문에 여기에서 다시 한 번 강조하는 바이다. 다음으로 숨겨진 보석을 발견할 곳은 무엇이 새로운가 페이지이다. matplotlib에 도입될 때마다 각 특징이 도입된 버전과 함께 이 페이지에 나열되어 있으며, 보통 예제와 함수 문서로 가는 링크가 함께 있다. 그 페이지를 훓어 보는 것은 어떤 능력과 맞춤 기능이 지원되는지 알아보는 가장 좋은 방법중의 하나이다. matplotlib는 다양한 환경설정에서 작동하도록 설계되었다: 어떤 사람들은 그것을 웹 서버에서 "배치 모드"로 사용하여 이미지를 만들어 낸다. 또다른 사람들은 그래픽 사용자 인터페이스(GUIs)를 사용하여 상호대화적으로 도표를 작성한다. 그리하여 matplotlib를 재단해야만 원하는 일을 할 수 있다. 특히, 맞춤 matplotlibrc 파일을 한 번 살펴볼 필요가 있다. 이 파일에서 그냥 이미지를 만들지 아니면 GUI(후방 설정)를 사용할지 설정할 수 있으며 , 쉘에서 상호대화적으로 작업할지를 설정할 수 있다 (상호대화적 설정). 또, 상호대화적 사용법, show가 왜 이래요? 그리고 matplotlib 창이 꼼짝 안해요를 먼저 읽고 난 후에 아래의 예제를 타자해 넣으시기를 바란다. 많은 새로운 matplotlib 사용자들이 이 절차를 지키지 않아 혼란을 겪는다. 또는 적어도 문제가 발생하면 바로 다시 돌아와 읽을 마음의 준비를 하시기 바란다. matlab로 도표 작업을 해 보았다면 자연스럽게 matplotlib의 사용할 수 있을 것이다. 그리고 그렇지 않더라도 눈에 보이는 그대로 이해하실 수 있으리라 믿는다. 기본 개체는 그림이며, 그림에는 축이 있으며, 축에는 눈금이 있다. 축은 xlabels, ylabels, titles, ticklabels, 그리고 text로 장식된다. 다음은 matplotlib로 그림을 만들어 낼 수 있는 가장 단순한 스크립트이다.
파이썬 초보라면, 제일 먼저 이 도표에 관하여 드는 의문은 이럴 것이다. "왜 X축(xaxis)은 범위가 0-3이고 Y축(yaxis)은 1-4이지?" 그 대답은 이렇다. 단일 리스트나 배열을 plot 명령에 넘기면, matplotlib는 그것을 y-값 벡터라고 간주하고 자동으로 x-값들을 만들어 낸다. 파이썬은 0에서 시작하고, 기본 x 벡터는 y 벡터와 길이는 같지만 0에서 시작한다. 그러므로 x 벡터는 [0,1,2,3]이다. 물론, 기본 행위가 마음에 들지 않으면, x 데이터를 명시적으로 지정할 수 있다. 예를 들어 plot(x,y)와 같은 경우 x와 y는 길이가 같은 벡터이다. plot은 다재다능한 명령어이며, 가변 개수의 인자를 받는다. 예를 들어, x versus y를 도표하려면, 명령어를 다음과 같이 제출하면 된다 plot([1,2,3,4], [1,4,9,16])x와 y 쌍 인자마다, 선택적으로 세 번째 매개변수가 있는데 이는 형식화 문자열로서 도표의 색깔과 라인 유형을 지시한다. 형식화 문자열의 기호와 심볼은 matlab으로부터 기원하며, 색상 문자열을 라인 스타일 문자열과 결합할 수 있다. 기본 형식화 문자열은 'b-'인데, 이는 솔리드 청색 라인이다 (질문 금지, The Mathworks에 문의할 것). 예를 들어, 위의 예제를 빨간 원으로 도표하려면, 다음과 같이 제출하면 될 것이다
줄 스타일과 형식화 문자열에 관한 완전한 목록은 plot 문서를 참조하자. 위의 예제에서 axis 명령어는 [xmin, xmax, ymin, ymax] 리스트를 받아 그 축의 가시 범위를 지정한다. matplotlib가 리스트와만 작동해야 한다면, 수치 처리에 큰 쓸모가 없었을 것이다. 일반적으로 numpy 배열을 사용한다. 사실, 모든 연속열은 내부적으로 numpy 배열로 변환된다. 아래 예제는 배열을 사용하여 하나의 명령 안에서 여러 줄을 다양한 포맷 스타일로 도표하는 방법을 보여준다.
줄 특성 통제하기라인은 속성이 많다: linewidth, dash style, antialiased, 등등; lines 참조.여러가지 방식으로 줄 특성을 설정할 수 있다. # 키워드 인자를 사용한다 plot(x, y, linewidth=2.0) # Line2D 실체의 설정자 메쏘드를 사용한다. plot은 줄 리스트를 돌려준다 # 예를 들어 line1, line2 = plot(x1,y1,x2,x2). 아래에 한 줄만 있다 # 그래서 길이가 1인 리스트이다. line, = plot(x, y, 'o') 줄에서 터플 풀기를 사용하여 # 리스트의 첫 요소를 얻는다 line, = plot(x, y, 'o') line.set_antialiased(False) # 앤티엘리아싱 비활성화 # set 명령어를 사용한다. 아래의 예제는 matlab의 그래픽 스타일 처리 명령어를 # 사용하여 여러 특성을 라인 리스트에 설정한다. # 설정은 객체 하나 또는 객체 리스트와 투명하게 작동한다 lines = plot(x1, y1, x2, y2) setp(lines, color='r', linewidth=2.0) # set은 또한 문자열로 특성 이름과 함께 matlab 스타일의 인자 쌍을 받는다. # 그렇지만 본인은 위의 파이썬스러운 키워드 인자를 더 선호한다 setp(lines, 'color', 'r', 'linewidth', 2.0) 라인 특성
라인 특성 리스트를 얻으려면, 라인(들)을 인자로 하여 setp 함수를 호출하면 된다. >>> lines = plot([1,2,3]) >>> setp(lines) 여러 그림과 축을 가지고 작업하기Matlab과 pylab은 현재 그림과 현재 축이라는 개념이 있다. 모든 도표와 텍스트 라벨 명령어는 현재 축에 적용된다. 함수 gca는 Axes 실체로 현재 축을 돌려주고, 함수 gcf는 Figure 실체로 현재 그림을 돌려준다.보통, 이에 관해서는 신경 쓸 필요가 없다. 왜냐하면 모든 것은 배경뒤에서 처리해 주기 때문이다. 다음은 두 개의 하부도표를 만드는 스크립트이다
여기에서 figure 명령어는 선택적이다. 'figure(1)'이 기본으로 생성되기 때문이다. 꼭 마찬가지로 수작업으로 축을 지정하지 않으면 기본으로 subplot(111)이 생성된다. subplot 명령어는 numrows, numcols, fignum를 지정하는데 여기에서 fignum는 범위가 1에서부터 numrows*numcols까지이다. numrows*numcols<10이면 subplot 명령어 안의 쉼표는 선택적이다. 그래서 subplot(211)은 subplot(2,1,1)과 동일하다. 얼마든지 하부도표와 축을 만들 수 있다. 즉 사각형 격자가 아니라, 축을 손수 배치하고 싶으면, axes 명령어를 사용하세요. axes([left, bottom, width, height])로 위치를 지정할 수 있다. 여기에서 모든 값은 분수 좌표이다 (0에서 1까지). axes_demo.py에서 손수 축을 배치하는 예를 보고 line_styles.py 에서 여러 하부도표로 작업하는 예를 보자. 그림 번호를 증가시키면서 여러번 figure를 호출하면 여러 그림을 만들 수 있습니다. 물론, 각 그림에는 얼마든지 원하는 만큼 축과 하부도표가 담길 수 있다. from pylab import *
figure(1) # 첫 그림
plot([1,2,3])
figure(2) # 두번째 그림
plot([4,5,6])
figure(1) # figure 1 current
title('Easy as 1,2,3') # figure 1 title
show()
clf로 현재 그림을 지울 수 있다. 그리고 cla로 현재 축을 지울 수 있다.
텍스트 작업하기모든 텍스트 명령어는 (xlabel, ylabel, title, 그리고 text) 선택적인 키워드 인자 또는 사전을 받아 폰트 특성을 지정한다. matplotlib에서 폰트 특성을 지정하는데 세가지 방법이 있다: setp를 사용한 핸들 그래픽 호출과 객체 지향적 방법 그리고 폰트 사전이 그것이다.text 명령어는 Text 실체를 돌려준다 (또는 여러 텍스트 객체가 생성되면 대신에 실체 리스트를 돌려준다). 그리고 다음과 같이 폰트 속성을 설정할 수 있다; 이 이름들은 matlab의 텍스트를 위한 그래픽 처리와 호환된다.
텍스트의 정렬과 인쇄방향을 제어하는 법은 align_text 예제를 참고하자. 다음은 텍스트를 도표에 추가하는 예이다
그래픽 처리(handle graphics)로 텍스트 특성 제어하기텍스트 특성을 바꾸고 싶고 matlab 그래픽 처리를 사용하고 싶으면, setp 명령어를 사용하여 위의 테이블에 나열된 특성을 설정할 수 있다. 예를 들어, 빨간색 볼드 xlabel을 만들고 싶으면, 다음과 같이 하면 된다.t = xlabel('time')
setp(t, color='r', fontweight='bold')
설정은 텍스트 실체를 담은 리스트에도 작동한다. 다음은 모든 눈금 라벨의 특성을 바꾼다.
labels = getp(gca(), 'xticklabels') setp(labels, color='r', fontweight='bold') 객체 메쏘드를 사용하여 텍스트 제어하기setp 명령어는 그냥 Text 객체의 set 메쏘드를 포장했을 뿐이다. 실체 메쏘드를 사용하고 싶으면, 그냥 텍스트 특성 앞에다 set_를 붙여서 보통의 파이썬 실체 메쏘드를 호출하면 된다. 다음과 같이 말이다t = xlabel('time')
t.set_color('r')
t.set_fontweight('bold')
kwargs와 dicts로 텍스트 제어하기모든 텍스트 명령어는 선택적으로 사전과 키워드 인자를 받아 폰트 특성을 제어한다. 예를 들어, 기본 폰트 테마를 설정하고 싶고 주어진 텍스트 명령어에 대하여 개별 특성들을 오버라이드 하고 싶으면, 다음과 같이 하면 된다.
이제, 모든 텍스트는 기본 테마가 있으며, 이는 사전 font (bold, Courier, red, 11 point)에 의하여 설정되지만, 키워드 인자를 건네면 개별 테스트 조각마다 선택적으로 특성을 오버라이드 할 수 있다. 예를 들어 text 명령어는 색상 문자열 'k'로 검정색을 사용한다.
수학 표현식 작성하기표현식에 TeX 조판을 사용할 수 있다; 사용법과 요구조건 그리고 후방 정보에 관해서는 mathtext 문서를 참조하세요.텍스트는 무엇이든 수학 텍스트를 사용할 수 있다. 날 문자열을 사용할 필요가 있다 (따옴표 앞에 'r'을 둠), 그리고 문자열 텍스트 주위에 달러 사인을 두를 필요가 있다. TeX에서 처럼 말이다. 보통의 텍스트와 mathtext는 같은 문자열에 엮을 수 있다. Mathtext는 Bakoma Computer Modern 폰트나 STIX 폰트 또는 여러분이 제공한 Unicode 폰트를 사용한다. mathtext 폰트는 맞춤 변수 "mathtext.fontset"로 설정할 수 있다. # 평범한 텍스트
title('alpha > beta')
# math 텍스트
title(r'$\alpha > \beta$')
윗첨자와 아랫첨자를 만들려면 다음과 같이 '_' 심볼과 '^' 심볼을 사용하자.title(r'$\alpha_i > \beta_i$')또 수 많은 TeX 심볼을 사용할 수도 잇다. symbols, as in \infty, \leftarrow, \sum, \int; 완전한 목록은 mathtext를 참조하자. over/under subscript/superscript 스타일 역시 지원한다. 0부터 무한대까지 x_i의 합을 작성하려면 다음과 같이 할 수 있다 text(1, -0.6, r'$\sum_{i=0}^\infty x_i$')
수학 심볼에 대한 기본 폰트는 italics이다. 폰트를 바꾸려면, 예를 들어, 로만 폰트로 "sin"을 작성하려면, 다음과 같이 텍스트를 font 명령어로 둘러싸자. text(1,2, r's(t) = $\mathcal{A}\mathrm{sin}(2 \omega t)$')
더 좋은 것은 로만 폰트로 식자된 함수 이름은 많이 사용되므로 지름길이 있다. 그래서 위의 표현식은 다음과 같이 작성할 수 있다:
text(1,2, r's(t) = $\mathcal{A}\sin(2 \omega t)$')
여기에서 "s"와 "t" 변수는 이택릭 폰트(기본값)이고, "sin"은 로만 폰트, 그리고 and the 진폭 "A"는 손글씨체(caligraphy) 폰트이다. 폰트 선택은 Roman \mathrm, italics \mathit, caligraphy \mathcal, 그리고 typewriter \mathtt이다.
STIX 폰트를 사용한다면 다음과 같이 blackboard (double-struck) \mathbb, circled \mathcircled, Fraktur \mathfrak, script (cursive) \mathscr 그리고 sans-serif \mathsf를 선택할 수도 있다.
다음 악센트가 지원된다: \hat, \breve, \grave, \bar, \acute, \tilde, \vec, \dot, \ddot. 모두 구문이 같다. 예를 들어 오버바를 만들려면 \bar{o} 또는 우물라우트를 만들려면 \ddot{o}로 하면 된다.
상호대화적 항해모든 그림 창에는 항해 툴바라 따로온다. 이 툴바는 데이터 세트를 항해하는데 사용된다. "classic" 고전 툴바 또는 "toolbar2" 최신(newfangled) 툴바를 선택할 수 있는데 matplotlibrc 파일에다 toolbar 설정을 하면 된다. 아주 방대한 데이터 세트 작업을 상호대화적으로 하고 싶다면, matplotlib는 데이터 클리핑을 지원한다. 데이터는 활성 뷰포트에 도표되기 전에 numerix로 클립된다. 그래서 아주 방대한 데이터 세트가 있어도, 전체를 도표하고, 제한 창을 작은 범위로 설정한 다음 상호대화적으로 데이터를 스크롤해 가면서 훌륭하게 갱신할 수 있다. 본인은 matplotlib로 EEG 뷰어를 작성했는데 (스크린샷 참조) 보통 25 MB 데이터 세트를 도표하는데 800 MHz PC에서 양호한 성능을 보였다. 긴 데이터를 제한된 데이터 창으로 보는 예는 matplotlib 소스에 따라오는 stock_demo.py 예제를 참조하자 -- 60일 중에 앞 3일간만 분단위로 인텔사와 애플사에 대한 주식 시황이 최초로 뷰포트에 나타난다. 이 예제에서 데이터 클리핑은 명시적으로 활성화 시켜야 하는 특징이다.
toolbar2toolbar2 버튼은 고전적 matplotlib 툴바와 아주 다르게 행위한다. (안그러면 뭐하러 새로 툴바를 도입할까!) 앞으로 뒤로 버튼이 시각적으로 비슷하지만 말이다. 자세한 것은 아래를 참고하자.
matplotlib 재단하기matplotlib은 rc 환경구성 파일로 matplotlibrc을 사용한다. 설치시 이 파일은 표준 배포 경로에 배치되는데, 예를 들어 윈도우즈라면 C:\Python23\share\matplotlib\matplotlibrc, 또는 리눅스 류라면 /usr/local/share/matplotlib/matplotlibrc이 그 위치가 된다. matplotlib을 설치할 때마다, 이 파일을 덮여 씌여지므로, 맞춤 설정이 저장되기를 원한다면, 이 파일을 HOME 디렉토리로 옮기고 HOME 환경 변수에 설정하자.matplotlib에 있는 거의 모든 특성의 기본값을 제어할 수 있다: 그림 크기와 dpi, 라인 두께, 컬러와 스타일, 축, 축과 격자 특성, 텍스트와 폰트 특성 등등. 파일의 포맷은 안에 설명되어 있으므로, 자세한 정보는 matplotlibrc 안을 들여다 보자. 파이썬 스크립트나 쉘에서 상호대화적으로 rc 명령어를 사용하여 동적으로 기본 값을 바꿀 수도 있다. 예를 들어 기본 라인 특성을 바꾸려면, 다음과 같이 할 수 있다 >>> rc('lines', linewidth=2, color='r')
기본 라인은 더 두꺼워지고 빨간색이 된다. backend, numerix, interactive, toolbar, timezone 그리고 datapath를 제외하고 모든 rc 매개변수들은 이런식으로 동적으로 맞춤재단이 가능하다. 더 자세한 정보는 rc를 참조하자.
축 특성 제어하기axes와 subplot 명령어는 생성된 Axes 실체를 돌려주고, 그를 사용하여 축의 특성을 제어할 수 있다. 예를 들어 ticklines, ticklabels, gridlines, 등등을 Axis API를 통하여 set 메쏘드를 호출하면 제어할 수 있다. 그렇지 않고 matlab의 그래픽 처리 명령어가 더 좋으면, setp를 사용하여 축 특성을 제어할 수도 있다.subplot(111) plot([1,2,3]) glines = getp(gca(), 'gridlines') # gridlines을 푸른색으로 바꾸고 더 두껍게 만든다 setp(glines, 'color', 'b', 'linewidth', 2) # patches.Rectangle 실체가 사각형 축 프레임의 # 줄 두께를 증가시키도록 만든다 frame = gca(gca(), 'frame') setp(frame, 'linewidth', 2)본인이 여러 세부도표가 있을 때 도표 작업중에 많이 마주치는 한가지 작업이 있다. 비율이 같을 경우 가장 낮은 세부도표만 제외하고 모든 세부도표에서 xticklabel을 비활성화시키고 싶은 경우가 종종 있다. 다음은 핸들 그래픽(handle graphics)으로 처리하는 방법이다; gca는 현재 축의 핸들을 돌려준다는 것을 기억하자 subplot(211) plot([1,2,3], [1,2,3]) setp(gca(), xticklabels=[]) subplot(212) plot([1,2,3], [1,4,9])실체 메쏘드도 마찬가지다 a1 = subplot(211) plot([1,2,3], [1,2,3]) a1.set_xticklabels([]) subplot(212) plot([1,2,3], [1,4,9]) 상호대화 쉘 사용하기파이썬 쉘에서 상호대화적으로 matplotlib을 사용할 수 있다. 추천하는 파이썬 쉘은 ipython이다. 이 쉘은 명시적으로 모든 matplotlib 백엔드를 지원한다. pylab 옵션을 사용하면 된다. 다른 상호대화 환경에서는 일부 벡엔드와 IDE가 호환되지 않는 경우가 있다. 왜냐하면, 그런 경우 다른 GUI 사건 처리자를 사용하기 때문이다. matplotlib를 IDE에서 사용하고 싶다면, 백엔드 문서에서 호환 정보를 참고하시기를 바란다. 표준 파이썬 쉘이라면 TkAgg 벡엔드를 사용해야 한다. 다른 백엔드나 쉘 또는 IDE에서 상호대화적으로 작업하려면, 백엔드 와 상호대화적 이라는 문서를 참고하자.사건 처리데이터를 시각화할 때, 사용자로부터 상호대화적으로 입력을 얻는 것이 종종 도움이 된다. 모든 그래픽 사용자 인터페이스(GUIs)는 사건 처리를 제공하여 키가 눌렸는지 마우스가 어디에 위치하는지 버튼이 클릭되었는지를 결정한다. matplotlib은 수 많은 GUI를 지원한다. 그리고 pylab 인터페이스의 connect 메쏘드와 disconnect 메쏘드를 통하여 GUI 사건 처리를 지원한다. API 사용자라면 아마도 GUI의 사건 처리를 직접 사용하고 싶겠지만, 선택적으로 FigureCanvas.mpl_connect 메쏘드를 사용한다.matplotlib는 역호출 사건 처리 메커니즘을 사용한다. 기본 아이디어는 청취하고 싶은 사건을 등록하고, 그 사건이 일어날 때 그림 캔버스가 사용자 정의 함수를 호출하는 것이다. 예를 들어, 사용자가 마우스를 그림 어디에 클릭했는지 알고 싶다면, 다음과 같이 함수를 정의하면 된다 def click(event):
print 'you clicked', event.x, event.y
# 사건 처리자와 함께 이 함수를 등록한다.
connect('button_press_event', click)
그러면 사용자가 그림 캔버스 위를 클릭할 때마다, 정의해 놓은 함수가 호출되고 MplEvent 실체가 반환된다. 이벤트 실체는 다음과 같은 속성이 정의되어 있다.
from pylab import *
plot(arange(10))
def on_move(event):
# x 와 y 좌표를 픽셀 단위로 얻는다
x, y = event.x, event.y
if event.inaxes:
print 'data coords', event.xdata, event.ydata
connect('motion_notify_event', on_move)
show()
날짜 도표matplotlib는 파이썬 datetime 객체와 부동소수점수 사이를 변환함으로써 날짜 도표를 처리하는 변환 함수를 제공한다. 이 숫자들은 그레고리안 달력 UTC 시간으로 날짜를 나타낸다. UTC를 사용하는 장점은 일광 절약 시간이나 시간대 격차가 없다는 것이다. 그 때문에 시간 계산이 편리하다. 그렇지만, 이는 그저 matplotlib가 사용하는 내부 포맷일 뿐이며, 시간대(timezone)가 지원된다. 지원되는 날짜의 범위는 파이썬의 datetime 모듈과 같이: 0001-9999년까지이다matplotlib 0.63 이전이라면 날짜가 기원 (1972) 이후로 초단위로 표현되며 시간대(timezone)가 지원되지 않는다. 이제 datetime 객체를 사용하여 시간 범위를 확장하도록 코드가 재작성되어 날짜 도표가 작동하고 시간대를 지원한다. 그리하여 dateplotting은 python2.3이 필요하다. 다음 섹션을 세심하게 살펴보고 API_CHANGES를 참고하여 예전 코드를 이주시키려면 어떤 변화가 요구되는지 알아보자. 또 주목하자. 이름이 같은 날짜 위치지정자 함수는 대부분 이제 (그리고 더욱 일반적으로) 구성자 구문이 다르다. 세가지 datetime 변환 함수가 있다: date2num과 num2date 그리고 drange가 그것이다. date2num 함수는 파이썬의 datetime(또는 datetimes 연속열)을 받아 부동소수점수 또는 부동소수점 연속열을 돌려준다. num2date 함수는 반대의 일을 한다. drange 함수는 시작 날짜와 종료 날짜 그리고 datetime 시간증분(timedelta) 객체를 받아 부동소수점수 연속열을 돌려준다. date1 = datetime.date( 1952, 1, 1 ) date2 = datetime.date( 2004, 4, 12 ) delta = datetime.timedelta(days=100) dates = drange(date1, date2, delta)plot_date 함수는 부동소수점수 날짜에 대하여 일련의 y-values 값들을 찍는데 사용된다. x 축은 그냥 부동소수점수 연속열일 뿐이므로, 쉽게 plot를 사용할 수 있다. 사실, 이 일을 바로 plot_date가 뚜껑 아래에서 해 준다. 유일한 차이점은 plot_date가 날짜 간격 지정자와 날짜 간격 포맷터를 골라서 제시된 날짜의 범위에 기반하여 지능적으로 기본 선택을 시도한다. 맞춤 날짜 지정자와 포맷터를 사용하고 싶다면, 그냥 간단하게 날짜 도표용 plot 명령어를 사용하면 된다. # 무작위로 y 값을 만든다 s = rand(len(dates)) plot_date(dates, s) dateutils로 날짜 눈금 지정하기matplotlib-0.63의 날짜 도표에서 또다른 변화는 강력한 dateutil 꾸러미가 포함되어 날짜 눈금 위치지정을 지원한다는 것이다. dateutil는 matplotlib 배포본에 포함되어 있어서 설치되어 있지 않으면 자동으로 설치된다. dateutil 꾸러미는 반복 규칙(recurrance rules)을 제정하기 위한 rrule 모듈을 제공한다. 그리하여 월요일마다 5PM 시, 매 부활주일마다, 지정된 시간에, 주말 등등마다 눈금을 배치할 수 있다. matplotlib의 모든 날짜 눈금 지정자는 뚜껑 아래에서 rrules를 이용한다 (matplotlib.ticker 그리고 matplotlib.dates에서 날짜 눈금 지정에 관하여 더 자세한 정보를 참고하자).다음은 매해마다 큰눈금, 매달마다 작은 눈금을 만드는 눈금지정자를 설정하는 예이다. years = YearLocator() # 해마다
months = MonthLocator() # 달마다
yearsFmt = DateFormatter('%Y')
ax.xaxis.set_major_locator(years)
ax.xaxis.set_major_formatter(yearsFmt)
ax.xaxis.set_minor_locator(months)
DateFormatter 클래스는 strftime 형식화 문자열을 받는다. 위의 예제는 YearLocator와 MonthLocator에 대하여 기본 구성자를 사용하였다. 그러나 이 행위를 맞춤 재단할 수 있다. 예를 들어, 큰 눈금을 5년마다 만들고 작은 눈금을 3, 6, 9, 12월에 만들려면 대신에 다음과 같이 할 수 있다 # 5년마다 years = YearLocator(5) # 분기마다 months = MonthLocator(range(3,13,3))날짜 눈금 지정자 MinuteLocator, HourLocator, DayLocator, WeekdayLocator, MonthLocator, 그리고 YearLocator가 제공되며, rrule 발생자에 대한 인터페이스가 간단하다. date_demo1.py 예제와 date_demo2.py 예제를 참고하자. 날짜 눈금지정을 완전하게 통제하려면 RRuleLocator 클래스로 자신만의 rrule을 사용하면 된다. date_demo_rrule.py 예제를 참고하자.
pytz로 시간대 처리하기시간대(Timezone)는 pytz 모듈을 통하여 지원된다. 이 모듈은 올슨(Olsen) 데이터베이스 시간대의 546항을 구현한 파이썬 datetime 모듈의 tzinfo 구현을 사용한다. pytz는 matplotlib 배포본에 포함되어 있으며 가지고 있지 않다면 자동으로 설치된다. 그리하여 짐바브웨에 살면서 matplotlib로 런던이나 뉴욕의 금융 동향을 도표할 수 있다. 일광 절약 시간 같은 괴이한 것들을 정확하게 처리한다. 기본 시간대는 matplotlibrc 파일에서 timezone 매개변수로 설정한다. 시간대는 pytz.timezone 구성자가 받을 수 있는 문자열로 지정된다. 예를 들어 'US/Eastern'이나 'Europe/London' 같이 말이다. matplotlib에 따라오는 rc 파일에 지정된 기본 시간대는 'UTC'이다. matplotlib는 디렉토리마다 rc 파일을 지원하므로, 여러분의 시간대 말고 또다른 시간의 프로젝트가 있을 경우, rc 파일을 작업 디렉토리에 두면 그 프로젝트가 기본 시간대로 사용할 수 있다.drange와 date2num을 제외하고 모든 matplotlib 날짜 눈금 클래스와 함수는 선택적인 인자 tz를 받는데 이는 tzinfo 실체이다; drange와 date2num가 이 인자를 사용하지 않는 이유는 공급된 datetime 실체의 tzinfo로부터 정보를 추론할 수 있기 때문이다. tz가 None (기본값)이라면 rc 값이 사용된다. date_demo_convert.py에서 시간대 정보를 사용한 날짜 도표의 예를 살펴보자. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Powered by |
|---|
| YAPTU! |