[References]
http://pythonstudy.xyz
1. Matplotlib 개요
Matplotlib는 파이썬에서 Data를 차트나 플롯(Plot)으로 그려주는 Data 시각화(Data Visualization) 라이브러리 패키지이다.
Matplotlib는 라인 플롯, 바 차트, 파이 차트, 히스토그램, Box Plot, Scatter Plot 등을 비롯하여 다양한 차트와 플롯 스타일을 지원한다.
Matplotlib 갤러리 웹페이지(https://matplotlib.org/gallery.html)에서 다양한 샘플 차트를 볼 수 있다.
과학용 파이썬 배포판인 아나콘다(Anaconda)에 포함된 Jupyter Notebook을 사용하면 Data Visualization하기 편리하다.
2. Matplotlib 사용법
Matplotlib를 사용하기 위해서는 먼저 'matplotlib.pyplot'을 아래와 같이 import 한다. pyplot을 다른 이름으로 사용할 수 있지만 통상 plt라는 alias를 사용한다.
'plt.plot()'은 라인 플롯을 그리는 함수인데, 아래는 X축 값 1, 2, 3과 Y축 값 110, 130, 120을 가지고 라인 플롯을 그리는 예제이다.
'plt.show()'는 실제 그림을 표시하는 함수이다.
from matplotlib import pyplot as plt
plt.plot([1, 2, 3], [110, 130, 120])
plt.show()
Jupyter Notebook에서 위 코드를 실행하기 위해서는 코드 셀에서 'Shift + Enter'를 치면 아래와 같이 출력란에 차트가 그려진다.
만약 아래 첫 번째 라인에서와 같이 "%matplotlib inline" 를 넣게 되면, 'Shift + Enter'를 치지 않고 Run 버튼을 눌러 그래프를 얻을 수 있다.
이러한 '% 명령'은 'Cell Magic' 명령어라고 불리우는 것으로 이는 파이썬 코드가 아니라 Jupyter에게 특정 기능을 수행하도록 하는 명령이다.
'%matplotlib inline' 명령은 Jupyter에게 matplotlib 그래프를 출력 영역에 표시할 것을 지시하는 명령이다.
플롯에 X, Y 축 레이블이나 제목을 붙이기 위해서는 'plt.xlabel(축 이름)', 'plt.ylabel(축 이름)', 'plt.title(제목)' 등의 함수를 사용하면 된다.
from matplotlib import pyplot as plt
plt.plot(["Seoul", "Paris", "Seattle"], [30, 25, 55])
plt.xlabel('City')
plt.ylabel('Response')
plt.title('Experiment Result')
plt.show()
4. 범례 추가
플롯에 여러 개의 라인들을 추가하기 위해서는 'plt.plot()'을 'plt.show()' 이전에 여러 번 사용하면 된다.
각 라인에 대한 범례를 추가하기 위해서는 'plt.legend([라인1 범례, 라인2 범례]) 함수'를 사용하여 각 라인에 대한 범례를 순서대로 지정하면 된다.
from matplotlib import pyplot as plt
plt.plot([1, 2, 3], [1, 4, 9])
plt.plot([2, 3, 4], [5, 6, 7])
plt.xlabel('Sequence')
plt.ylabel('Time(secs)')
plt.title('Experiment Result')
plt.legend(['Mouse', 'Cat'])
plt.show()
5. 다양한 차트 및 플롯
Matplotlib는 위에서 예시한 라인 플롯 이외에 여러 다양한 차트/플롯을 그릴 수 있는데, 각 차트/플롯마다 다른 함수들을 사용한다.
'Bar 차트'를 그리기 위해서는 'plt.bar()' 함수를 사용하고, 'Pie 차트'를 그리기 위해서는 'plt.pie()'를, '히스토그램'을 그리기 위해선 'plt.hist()' 함수를 사용한다.
아래는 'Bar 차트'를 예시한 것으로, 'plt.bar()'를 호출하여 Bar 차트를 그리고 있다.
from matplotlib import pyplot as plt
y = [5, 3, 7, 10, 9, 5, 3.5, 8]
x = range(len(y))
plt.bar(x, y, width=0.7, color="blue")
plt.show()