블로그 이미지
shadowchaser
이곳 저곳 이것 저것

calendar

1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

Notice

Matplotlib을 상세히 다뤄보도록 하자.


들어가기전에

여기에서는 matplotlib를 활용하여 챠트를 만들어보는 작업을 하도록 한다.
아래와 같이 작업해보자


그렇게 입력하고 shit + tab을 눌러보면..

아래와 같은 결과를 확인할 수 있다.



몇가지 기능을 하나씩 소개하겠다.

Funtional로 구현하는 방식

전 장에서 이야기했지만, mtplotlib를 구현하는 방식은 Functional로 사용하는 방법과 객체지향(Object Oriented)방식으로 구현하는 방법 두가지로 나뉠 수 있다. 일단 Functional로 구현하는 방식에 대해서 이야기 하겠다. (후에 기술하겠지만 Object Oriented 방식으로 개발하는 것이 훨씬 용이하다.)

xlabel, ylabel, title  

xlabel은 Xlabel을 추가하는 함수이고
ylabel은 Ylabel을 추가하는 함수이고
title은 Title을 추가하는 함수이다.

즉, 실행하면 다음과 같이 만들 수 있겠다.




헌데 그래프를 작성할 때, 그냥 하나만 작성해서 보여줄 일은 실상 별로 많지 않다.

비교표로 두 개의 그래프를 동시에 작성하던지, 아예 두개의 차트로서 표현을 해야할 때가 있다.

subplot 함수

그래서 subplot함수가 엄청 유요하다. subplot에는 파라메터를 최소 3개를 요구한다. 몇개의 행과 열로 구성될 것이고, 그중에 몇 번째것인지.

plot 함수

plot(x,y)만 써줘도 되지만 세번째 파라미터에 색상을 집어 넣어주면 색상까지 입혀져있는 모습을 확인할 수 있다.


Object Oriented로 구현하는 방식

우리가 class를 초기화하는 것처럼 fig = plt.figure()라는 방식으로 빈 figure object를 만들고 거기에 각 속성을 집어넣는 방식이다.
생각보다 매우 쉬우니까 이 방법으로 개발하자.

아래 이미지를 보면 아까전에 봤던 것과 비슷한 모습이 보이기도 하고, 새로운 녀석들이 보이기도 한다.
예를 들어 plt.Xlabel('X Label')axes.set_xlabel('XLabel')로 변경된 것을 확인할 수 있다.
눈치가 있으면 느꼈겠지만 fig.add_axes가 뭔가 중요한 역할을 하는 것 같다... 후술하겠다.


기본적으로 fig = plt.figure() 후 axes = fig.add_axes([.1, .1, .8, .8])은 암기하자

아래와 같이 두개의 챠트를 중복해서 그릴 수도 있다. 

( 옛날에 이런 거 한 번 그릴려면 정말 난리가 났었다. 옛날 activeX 컴포넌트에서는 저것을 그릴 수 있는 유료콤포넌트가 없어서 외주 고객에게 정말 많이 깨졌었는데.. 이런 게 무료라니.. 이런 게 이렇게 쉽게 구현된다니.. 정말 기가 차다. 하긴 벌써 15년전 이야기니까... )


fig.add_axes함수

이 함수는 각각의 위치를 지정하는 함수다. 
axes1과 같은 경우 0.1, 0.1, 0.8, 0.8이라고 작성이 되어있는데 , 첫 0.1은 이미지의 x축의 위치, 두번째 0.1은 이미지의 y축의 시작위치, 세번째 0.8은 이미지의 가로길이, 네번째 0.8은 높이를 의미한다.
0~1까지 값을 입력할 수 있으며 모두 상대적인 길이이다.
axes2도 마찬가지다. 훨씬 이해하기 쉬울 것이다. 0.2정도의 가로 위치에, 0.5정도의 높이에, 0.4정도의 너비, 0.3정도의 높이로 표현을 하겠다는 것이다.

혹시나 이해가 안될까봐 하나씩 바꾸면서 작성을 해보았다. 이래도 이해가 안가면 나도 난감해질 수 있다.


복합편

자 이제, 기초적인, 주요하게 사용되는 함수들을 배웠다.  활용을 해보도록 하자.
챠트 두개에 지금까지 배웠던 모든 것을 다 입력해보도록 하자.

쪼개기

functional api를 사용할 때 subplot함수를 활용했었던 것을 기억하는지 모르겠다.
마찬가지로서 객체지향 방식 구현에서도 동일하게 활용할 수 있다.
한 화면에 이미지를 6개를 넣을수도 3개를 넣을 수도 있다.

tight_layout 함수

tight_layout은 각 챠트들이 겹치지 않도록 해주는 정말 고마운 함수다.  항상 사용하도록 하자.


Size와 DPI 조절

챠트를 그리다 보면 width와 height를 조절해야할 필요가 있다. 이때, figsize가 사용된다.
"인치"가 단위로서 사용되는 것을 필히 유의하자.


Legend의 활용

한 챠트에 여러개의 그래프 표현이 필요할 때가 있다. 그럴 때는 색상 혹은 marker로서 구분을 하는데 이때, legend가 있으면 굉장히 편리하다.

legend함수

legend함수를 통해서 legend가 어디에 위치할지를 결정할 수 있다. parameter 속성을 확인해보면 다양한 값이 있으니 직접 확인해보도록.
예를 들어 10이라고 하면 정가운데에 위치한다.

또한 상대수치를 입력하여 옮길 수도 있다. 어쩔대는 아예 외부에다가 둘때 더 이쁘더라.



Plot 모양새 바꾸기 정리

plot 함수를 총정리해보았다.
color, linewidth, alpha, linestyle, marker, markersize, markerfacecolor, markeredgewidth, markeredgecolor등 여러가지가 있다.
나는 아래이미지처럼 초록색의 외곽선 마커를 갖고 있고 노란색으로 채워져있으며 선이 ":" 로 구성되어있는 챠트로 만들어보았다. 어떤가?


수치 변경에 따른 결과는 아래 챠트의 내용과 같다. 총정리랄까...




축의 모양 변경

set_xlim함수, set_ylim함수

set_xlim함수와 set_ylim함수는 x와 y축에서 데이터가 표시될 구간을 결정한다.
예를 들어, 데이터값들이 1~100까지 있다고 하더라도, [0,1]이라고 지정했다면 1~100값은 표시되지 않고 0~1까지만의 값이 표시되는 것이다.

그이외의 방법들

scatter함수

scatter함수는 값들을 말그대로 흩뿌리는 효과를 낸다.

hist함수

hist함수는 데이터의 값을 히스토그램으로 만들어준다.


여기까지 Matplotlib를 활용하여 챠트를 만들어 보는 방법을 정리해보았다.


이외에도

아래의 사이트는 꼭 들어가볼 것을 권한다.


간략하게 정리해보았는데, 어땠는지 모르겠다.

궁금한 사항있으면 언제든지 댓글 남겨주세요. 감사합니다.

'Python > 02_Visualization with Matplotlib, Pandas' 카테고리의 다른 글

4. Pandas를 통한 시간별 시각화  (2) 2017.10.07
3. Pandas Visualization 개요  (0) 2017.10.07
1. Matplotlib 기초  (0) 2017.10.06
0. 들어가기전에  (0) 2017.10.06
posted by shadowchaser