Matplotlib은 데이터를 시각화해주는 라이브러리입니다. Pandas와 마찬가지로 NumPy 모듈을 기반으로 하며, 통계량으로 알 수 없는 데이터에 대한 직관을 제공합니다. 머신러닝의 성능을 비교하는데 있어서 필수적인 라이브러리입니다.
이번에도 주피터 노트북을 사용합니다.
numpy 모듈과 matplotlib 패키지의 pyplot 모듈을 import 해주세요.
1. 선형 플롯(Line Plot) 그리기
기본 그래프인 선형 플롯은 plt 모듈의 plot 함수로 생성합니다. 하이퍼 매개변수에 따라 다양한 호출 시그니처(Call signature)를 가집니다.
plot(x, y) : 기본 스타일 플롯을 생성합니다. plot(x, y, fmt) : 포맷 문자열을 통해 스타일을 설정한 플롯을 생성합니다. plot(y) : 인덱스를 x로 사용하여 플롯을 생성합니다. plot(y, fmt) : 인덱스를 x로 사용하고, 포맷 문자열을 통해 스타일을 설정한 플롯을 생성합니다. |
플롯을 화면상에 나타나게 하려면 플롯객체의 show 함수를 사용합니다.
주피터 노트북에서는 플롯이 끝나는 지점에 세미콜론(;)을 붙여주면 show함수를 쓰지 않아도 그래프가 나타납니다.
한 플롯에 여러 그래프를 나타내고 싶으면 plot 함수를 여러번 호출하고 마지막에 show 함수를 호출하면 됩니다.
다음처럼 매개변수를 반복해서 적으셔도 됩니다.
plt.plot(x1, y1, x2, y2, x3, y3 ...) plt.plot(y1, fmt1, y2, fmt2, y3, fmt3 ...) plt.plot(x1, y1, fmt1, x2, y2, fmt2, x3, y3, fmt3 ...) |
레이블이 있는 데이터는 다음과 같이 레이블을 표기하고 매개변수 data를 입력하면 됩니다.
플롯의 축에 라벨을 표시하려면 xlabel, ylabel 함수를 사용합니다.
축의 범위를 지정하려면 xlim, ylim 함수를 사용합니다.
axis 함수를 통해 한꺼번에 지정할 수도 있습니다.
plt.axis((X_min, X_max, Y_min, Y_max))
|
2. 스타일 매개변수
매개변수 linestyle을 설정하여 선 종류를 지정할 수 있습니다. solid, dashed, dotted, dashdot가 있습니다. "None", "", " "은 선을 표시하지 않습니다.
튜플을 사용하여 선 종류를 커스터마이징 할 수도 있습니다.
매개변수 ls는 linestyle과 같습니다.
매개변수 marker를 설정하여 마커를 지정할 수 있습니다.
마커의 종류는 다음 사이트를 참고하세요:
https://matplotlib.org/2.1.2/api/markers_api.html#module-matplotlib.markers
매개변수 color를 설정하여 선과 마커의 색상을 설정할 수 있습니다.
기본 색상으로 r, g, b, c, m, y, k, w가 있고, css 색상 또는 rgb 헥스코드를 입력하면 됩니다.
linestyle, marker, color는 포맷 문자열(format string)을 통해서도 표시가능합니다.
아래 문자열을 조합하시면 됩니다.
그 외 다양한 매개변수가 있습니다. 다음 사이트를 참고하세요:
https://matplotlib.org/2.1.2/api/_as_gen/matplotlib.axes.Axes.plot.html#matplotlib.axes.Axes.plot
3. 플롯 스타일 커스터마이징
matplotlib 모듈이 개발된지 오래되었다보니 인터페이스가 투박합니다. 그러나 인터페이스의 커스터마이징이 가능하도록 되어있습니다.
우선 다음 코드를 입력하여 이용가능한 스타일시트를 확인해보겠습니다.
스타일을 적용하려면 matplotlib.pyplot.style 모듈의 use 함수를 사용합니다. 기본값은 "default"입니다.
플롯 스타일을 일시적으로 변경하려면 스타일 컨텍스트 매니저를 이용합니다.
4. 객체 지향 인터페이스
Matplotlib는 그래프를 다루는 두 가지의 인터페이스를 제공합니다. 첫번째는 MATLAB 스타일로 pyplot 모듈을 사용하는 방식이고, 두번째는 객체 지향 인터페이스입니다. Matplotlib 공식 문서에서는 객체 지향 인터페이스 사용을 권장합니다.
pyplot 모듈에서 면에 대한 객체는 figure 함수를 통해, 축에 대한 객체는 axes 함수를 통해 생성할 수 있습니다.
이제 ax 객체를 통해 그래프를 그릴 수 있습니다. 기본적으로 fyplot 모듈을 사용한 것과 비슷합니다.
스타일은 세터를 통해 설정가능합니다.
아래와 같이 스타일을 설정할 수도 있습니다.
여러 플롯을 나타내려면 axes 객체 인터페이스의 subplots 함수를 사용합니다. 이 함수는 figure 객체와 axes 객체를 리턴합니다. 매개변수로 행과 열의 갯수를 입력합니다.
pyplot 모듈에서도 subplot 함수를 사용하여 여러 플롯을 나타낼 수 있습니다. 매개변수로 행과 열의 갯수 및 인덱스를 입력합니다.
5. 산점도 플롯(Scatter Plot) 그리기
산점도는 우선 pyplot 모듈의 plot 함수를 통해 생성이 가능합니다.
포맷 문자열 "ko"는 선이 없는 검은색 원형마커를 만듭니다. ms는 markersize랑 같은 역할을 하며, 마커의 크기를 나타냅니다.
plot 함수는 산점도를 그릴수는 있지만 색이나 패턴 등을 지정하는 기능이 약합니다.
pyplot 모듈에는 산점도를 그리는 scatter 함수가 따로 존재합니다. scatter 함수는 색상이나 크기, 알파값(농도) 등을 지정할 수 있습니다. 매개변수 c는 색상, s는 크기, alpha는 농도, cmap은 색상맵을 설정합니다.
colorbar 함수는 색상 막대를 생성합니다.
seaborn 패키지의 예제 데이터 iris를 통해 산점도를 그려보겠습니다.
iris 데이터 프레임의 정보를 보겠습니다.
species 열의 데이터 타입이 object 입니다.
pandas 모듈에는 Categorycal이라는 범주형 데이터로 변환해주는 함수가 있습니다. Categorycal 함수를 통해 species열을 변주형 데이터로 변환하고 species_cat 열에 추가하겠습니다.
species_cat 열의 데이터 타입이 category인 것을 확인할 수 있습니다. category 타입 데이터를 가지는 시리즈는 cat 객체를 가지고 있습니다. cat 객체의 codes 시리즈는 수치형 데이터를 가지고 있기때문에 분산도 색상 표현에 사용할 수 있습니다.
x값은 꽃받침 길이, y값은 꽃받침 넚이를 나타내는 산점도를 그립니다.
품종을 색상으로 표현함으로써 꽃받침 길이와 넚이의 경향을 시각적으로 확인가능합니다. 범주를 넣어보겠습니다.
6. 막대그래프(histogram) 그리기
막대그래프는 pyplot 모듈의 hist 함수를 통해 생성이 가능합니다. x축은 계급값, y축은 도수를 나타냅니다. 매개변수 bins는 계급수, rwidth는 막대 넓이를 설정합니다.
매개변수 density는 y축을 상대도수로 표현할지를 설정합니다.
seaborn 패키지의 예제 데이터 tips를 통해 막대그래프와 선형 플롯을 그려보겠습니다. 팁을 20개의 계급으로 나누어 막대그래프를 그리겠습니다. 선형 플롯으로는 팁에 대한 정규분포의 확률밀도함수를 그리겠습니다. 확률밀도함수는 scipy 모듈을 사용하겠습니다.
7. 상자그림(Box Plot)
상자그림은 중앙값, 제1사분위수(Q1)와 제3사분위수(Q3), 최대값, 최소값 등의 최소한 5개의 통계량을 한눈에 볼 수 있게 정리한 그림입니다.
tips 데이터 프레임에 대하여 tip 열의 상세정보를 보기위해 describe 함수를 호출하세요.
시리즈 객체에는 사분위수가 저장되어 있다는 것을 확인할 수 있습니다.
상자그림을 그리기 위해서는 pyplot 모듈의 boxplot 함수를 사용합니다. 매개변수로 시리즈 객체를 입력하면 됩니다. 라벨은 매개변수 labels에 배열로 입력합니다.
팁을 성별로 분리하여 상자그림으로 분석해봅시다. 이 상자그림을 통해 남성들이 주는 팁이 여성들이 주는 팁보다 많다는 것을 분석할 수 있습니다.
8. 이미지 플롯(Image Plot)
sklearn.datasets 모듈의 lad_digits 함수를 통해 bunch 타입의 데이터를 불러옵니다. 번치 객체는 images라는 키값을 가지는데 여기에 이미지 정보가 저장되어 있습니다. 저장된 정보는 8*8 크기의 픽셀정보로 구성되어 있습니다.
이미지 플롯은 pyplot 모듈의 imshow 함수를 통해 그릴 수 있습니다. Axes 객체를 통해 10 * 10 크기의 플롯을 만들고 이미지를 그려보겠습니다. 매개변수 cmap은 "binary"를 입력하겠습니다. binary 색상맵은 흑백 색상을 나타냅니다.
|