AI & BigData/데이터분석 관련

Matplotlib 기초 정리

Tigercow.Door 2018. 6. 11. 15:42
Matplotlib_clear

안녕하세요. 문범우입니다.

이번 포스팅에서는 파이썬 기반 시각화 라이브러리인 matplotlib에 대해서 알아보도록 하겠습니다.


해당 내용은 flearning의 김길호님의 강의를 바탕으로 작성되었습니다.

https://www.flearning.net/courses/6


1. Matplotlib 이란?


matplotlib은 다양한 데이터를 많은 방법으로 도식화 할 수 있도록 하는 파이썬 라이브러리로써, 우리는 matplotlib의 pyplot을 이용하게 됩니다.

이는 mathworks에서 개발한 매트랩(MATLAB)과 비슷한 형태를 가지고 있습니다.

matplotlib을 이용하면 우리가 이전에 알아본 numpy나 pandas에서 사용되는 자료구조를 쉽게 시각화 할 수 있습니다.


matplotlib을 사용하기 위해서는 먼저 matplotlib을 설치하고 아래와 같이 import를 해주어야 합니다.


import matplotlib

import matplotlib.pyplot as plt


또한 jupyter notebook에서 그래프를 제대로 확인하기 위해서는 아래와 같은 매직 커맨드를 작성해주셔야 합니다.


%matplotlib inline


이러한 매직커맨드는 맨 뒤에 inline 이외에도 우리가 아래에서 사용하는 nbagg 등의 다양한 속성이 있습니다.


Matplotlib 기초

1. Matplotlib 이란?

In [11]:
import matplotlib
import matplotlib.pyplot as plt
%matplotlib nbagg
#위와 같은 것이 %로 시작하는 것을 jupyter notebook의 magic command라고 한다.
# %who는 변수명의 리스트를 보여주고 %magic 은 모든 매직명령어를 보여준다.
# 전체적인 magic 명령어에 대해서는 다음 블로그를 참고
# http://studymake.tistory.com/601
# matplotlib 을 jupyter notebook에서 사용할 때, plot의 이미지를 보여주기 위해 magic command를 사용하는데,
# 이때 우리가 사용하는 nbagg 이외에도 다음과 같은 요소를 사용할 수 있다.
# Available matplotlib backends: ['osx', 'qt4', 'qt5', 'gtk3', 'notebook', 'wx', 'qt', 'nbagg','gtk', 'tk', 'inline']
# 사용되는 명령어에 대한 차이점이 정리되어 있는 사이트는 따로 찾지 못했지만
# 각각에 대해서는 matplotlib의 공식문서에서 참고 할 수 있는듯 하며,
# 우리가 사용하는 nbagg에 대해서는 다음 링크에서 확인할 수 있다.
# https://matplotlib.org/users/prev_whats_new/whats_new_1.4.html#the-nbagg-backend
import numpy as np
import pandas as pd

2. Plot의 종류

Line plot 그리기

In [12]:
# Series를 통한 line plot 그리기
s = pd.Series(np.random.randn(10).cumsum(), index=np.arange(0, 100, 10))
s
Out[12]:
0    -0.722984
10   -1.830547
20   -0.592063
30   -1.320894
40   -1.849281
50   -1.570039
60   -3.052119
70   -2.698092
80   -2.722053
90   -2.735229
dtype: float64
In [13]:
# 위에서 정의한 s라는 시리즈에 대해서 line plot을 그리고 싶다면?
s.plot()
Out[13]:
<matplotlib.axes._subplots.AxesSubplot at 0x108ef0c88>

s 라는 Series에서의 index와 value를 통해 그래프가 그려졌다.

그래프 우측상단의 전원버튼을 누르기 전까지 우리는 해당 그래프를 interactive하게 조작할 수 있다.

In [14]:
# DataFrame을 통한 line plot 그리기
df = pd.DataFrame(np.random.randn(10, 4).cumsum(axis=0),
                  columns=["A", "B", "C", "D"],
                  index=np.arange(0, 100, 10))
df
Out[14]:
A B C D
0 -0.278464 1.680385 0.711803 -0.216933
10 -0.239848 2.527778 1.558551 1.006354
20 -2.112968 1.384759 2.648977 -0.124528
30 -2.461009 -0.023573 2.145466 -0.253936
40 -4.098926 -0.191797 1.583091 -1.285248
50 -2.224330 0.036316 -0.053839 0.045480
60 -4.346708 0.467878 0.877064 -1.018642
70 -5.083230 2.082973 2.360633 0.942955
80 -5.860602 4.372568 2.506778 0.312459
90 -4.651125 5.932881 1.437739 -1.382153
In [16]:
df.plot()
Out[16]:
<matplotlib.axes._subplots.AxesSubplot at 0x109df6710>
In [17]:
# 하나의 열에 대해서만 보고 싶다면?
df['B'].plot()
Out[17]:
<matplotlib.axes._subplots.AxesSubplot at 0x10a859b38>

Bar plot 그리기

In [18]:
s2 = pd.Series(np.random.rand(16), index=list("abcdefghijklmnop"))
s2
Out[18]:
a    0.571031
b    0.225421
c    0.210635
d    0.247162
e    0.850638
f    0.300911
g    0.485898
h    0.573721
i    0.223882
j    0.248352
k    0.163142
l    0.977120
m    0.615089
n    0.376035
o    0.618324
p    0.374877
dtype: float64
In [19]:
s2.plot(kind='bar')
Out[19]:
<matplotlib.axes._subplots.AxesSubplot at 0x10b26a208>
In [21]:
# 가로방향의 bar plot그리기
s2.plot(kind='barh')
Out[21]:
<matplotlib.axes._subplots.AxesSubplot at 0x10c6f0908>
In [22]:
df2 = pd.DataFrame(np.random.rand(6, 4), 
                   index=["one", "two", "three", "four", "five", "six"],
                   columns=pd.Index(["A", "B", "C", "D"], name="Genus"))
df2
Out[22]:
Genus A B C D
one 0.832213 0.165459 0.385868 0.300776
two 0.937578 0.576798 0.175512 0.690425
three 0.473119 0.690937 0.844016 0.542061
four 0.974779 0.911599 0.880104 0.155459
five 0.421689 0.168038 0.637749 0.181037
six 0.921647 0.069688 0.143649 0.033414
In [23]:
df2.plot(kind='bar')
Out[23]:
<matplotlib.axes._subplots.AxesSubplot at 0x10d17e7f0>
In [28]:
df2.plot(kind='barh', stacked=True)