Search

Matplotlib

matplotlib.pyplot

Matplotlib 라이브러리의 pyplot 모듈은 MATLAB과 비슷하게 명령어 스타일로 동작하는 함수들을 가지고 있다.
일반적으로 Numpy 어레이를 이용한다.
줄여서 plt 라고 부른다.
import matplotlib.pyplot as plt
Python
복사

pyplot.gca()

현재의 axes 객체를 가져온다.

matplotlib 기본 셋팅

import matplotlib.pyplot as plt from matplotlib import rc # 한글 설정을 위한 함수 plt.rcParams['axes.unicode_minus'] = False # 마이너스 부호때문에 한글이 깨질 수가 있어 주는 설정 rc('font', family = 'Arial Unicode MS') %matplotlib inline
Python
복사

1. 기본 기능 알아보기

import matplotlib.pyplot as plt plt.plot([1,2,3,4]) plt.show()
Python
복사
→ 하나의 숫자 리스트를 입력하면, 알아서 y값으로 인식하고 자동으로 x 값 [0,1,2,3] 을 만들어낸다.
# 위의 리스트 외에도 튜플, 넘파이 어레이 형태로 집어넣을 수 있다. plt.plot((2,3,5,10)) # 또는 plt.plot(np.array([2,3,5,10]) # 마찬가지로 자동으로 x 값은 0,1,2,3 이 된다.
Python
복사
plt.plot([1,2,3,4],[1,4,9,16]) plt.show()
Python
복사

1-1. 스타일 지정하기

1-1-1. Format String
선의 색상과 형태를 지정하는 Format String을 세번째 인자에 입력할 수 있다.
‘ro’
‘red’ + 원형(’o’) 마커를 의미한다.
‘b-’
‘blue’ + 실선(’-’) 을 의미
plt.plot([1,2,3,4], [1,4,9,16], 'ro') plt.axis([0,6,0,20]) plt.show()
Python
복사
1-1-2. axis 축 설정
plt.axis([xmin, xmax, ymin, ymax])
축의 범위를 지정할 수 있다.
1-1-3. xlabel / ylabel 축 레이블 설정하기
plt.xlabel / plt.ylabel
plt.plot([1,2,3,4], [1,4,9,16]) plt.xlabel('X-Label') plt.ylabel('Y-Label') plt.show()
Python
복사
labelpad 파라미터
축 레이블의 여백을 지정한다.
# 여백 지정하기 plt.xlabel('X-Axis', labelpad=15) plt.ylabel('Y-Axis', labelpad=20) plt.show()
Python
복사
x축 레이블에 대해서 15pt, y축 레이블에 대해서 20pt 만큼의 여백을 지정함
1-1-4. 폰트 설정하기
fontdict 파라미터를 사용하면 축 레이블의 폰트 스타일을 설정할 수 있다.
plt.plot([1,2,3,4], [2,3,5,10]) plt.xlabel('X-Axis', labelpad=15, fontdict={'family':'serif', 'color':'b', 'weight':'bold', 'size':14}) plt.ylabel('Y-Axis', labelpad=20, fontdict={'family':'fantasy', 'color':'deeppink', 'weight':'normal', 'size':'xx-large'}) plt.show()
Python
복사
아래와 같이 코드를 짜는 것이 더 좋다.
font1 = { 'family': 'serif', 'color': 'b', 'weight': 'bold', 'size': 14 } font2 = {'family': 'fantasy', 'color': 'deeppink', 'weight': 'normal', 'size': 'xx-large' } plt.plot([1, 2, 3, 4], [2, 3, 5, 10]) plt.xlabel('X-Axis', labelpad=15, fontdict=font1) plt.ylabel('Y-Axis', labelpad=20, fontdict=font2) plt.show()
Python
복사
1-1-4. 위치 설정하기
loc 파라미터는 x축 레이블 / y축 레이블의 위치를 지정해준다.
단, x축 레이블 위치와 y축 레이블 위치의 옵션 종류가 다르다.
x 축 레이블 위치
‘left’ / ‘center’ / ‘right’
y축 레이블 위치
‘bottom’ / ‘center’ / ‘top’
plt.plot([1, 2, 3, 4], [2, 3, 5, 10]) plt.xlabel('X-Axis', loc='right') plt.ylabel('Y-Axis', loc='top') plt.show()
Python
복사
1-1-5. 범례 표시하기
범례는 그래프에 데이터의 종류를 표시하기 위한 텍스트다.
legend() 함수를 사용해서 표시할 수 있다.
plot() 함수에 label 문자열을 지정하고
plt.legend() 함수를 호출하면 된다.
plt.plot([1,2,3,4], [2,3,5,10], label='Price($)') plt.xlabel('X-Axis') plt.ylabel('Y-Axis') plt.legend() plt.show()
Python
복사

1-2. 레이블이 있는 데이터 사용하기

# 딕셔너리 -> plt.plot data_dict = { 'x' : [1,2,3], 'y' : [2,3,5] } plt.plot('x', 'y', data=data_dict) # 딕셔너리 키를 레이블로 입력해주고, data파라미터에 딕셔너리를 지정해준다. plt.show()
Python
복사

2. pyplot 사용하기(plt)

2-1. 기본

plt.figure(figsize=(10,6)) # 그림판 크기 설정 plt.plot(x,y) # x축, y축 데이터 입력 plt.xlabel("") # x축 제목 설정 plt.ylabel("") # y축 제목 설정 plt.grid() # 격자 무늬 생성 plt.title("") # 그래프 제목 생성 plt.legend(labels=['','',...]) # 범례 표시 plt.show() # 그래프 보여줘! plt.suptitle() # 그래프 전체 제목 지정(그래프 상단 중앙 위치)
Python
복사

선, 마크, 색깔 지정해주기

plt.plot() 안에서 설정하기
선과 점 함께 그리기
plt.scatter() : 산점도 그리기(plt.plot 대신)
데이터마다 다른 색깔로 표시하기
Series.plot(kind=’bar/barh’) : 막대그래프 그리기

사소한 Tip 들

; 의 여부
‘ ; ’ 을 뒤에 붙여주게 되면 불필요한 그래프의 변수명이 나오지 않게 된다. 예를들어 아래의 코드
data_result['소계'].plot(kind='barh', grid=True, figsize=(10,10))
Python
복사
의 결과는
위의 <Axes: ylabel=’구별’> 처럼 그래프의 변수명이 함께 출력된다.
만약, ‘ ; ’ 을 붙이게 되면
data_result['소계'].plot(kind='barh', grid=True, figsize=(10,10));
Python
복사
이렇게 깔끔하게 그래프만 출력된다.

텍스트 삽입해주기

plt.text(x 위치, y 위치 , 넣어줄 문자, fontsize)
for n in range(5): # 상위 5개 데이터 labeling 해주기 plt.text(data_sort_f['인구수'][n] * 1.02, data_sort_f['소계'][n] * 0.98 , data_sort_f.index[n], fontsize=15) # 하위 5개 데이터 labeling 해주기 plt.text(data_sort_t['인구수'][n] * 1.02, data_sort_t['소계'][n] * 0.98 , data_sort_t.index[n], fontsize=15)
Python
복사

사용자 지정 colormap 만들어주기

from matplotlib.colors import ListedColormap # colormap 을 사용자 정의로 세팅 color_step = ['#e74c3c','#2ecc71','#95a9a6','#2ecc71','#3498db','#3498db'] my_cmap = ListedColormap(color_step)
Python
복사
plt.scatter(data_result['인구수'],data_result['소계'], s=50, c = data_result['오차'], cmap = my_cmap)
Python
복사

3. 여러 개의 그래프 그리기

3-1. 여러 데이터 배열 삽입

plt.plot(X, Y1, 'r--', X, Y2, 'bs', X, Y3, 'g^')
Python
복사
import matplotlib.pyplot as plt import numpy as np # 200ms 간격으로 균일하게 샘플된 시간 t = np.arange(0., 5., 0.2) # 빨간 대쉬, 파란 사각형, 녹색 삼각형 plt.plot(t,t,'r--',t,t**2,'bs',t,t**3,'g^') plt.show()
Python
복사
다양한 스타일을 갖는 여러 개의 곡선을 하나의 그래프로 나타낸다.

subplot 그려주기

plt.subplot(r,c,n) # r행 c열의 그래프 영역 중 n번째 영역
Python
복사
plt.style.use("ggplot") plt.figure(figsize=(6,4)) plt.suptitle("white / red", fontsize=20) ## white plt.subplot(1,2,1) sns.barplot(x = white['quality'].value_counts().index, y = white['quality'].value_counts()) ## red plt.subplot(1,2,2) sns.barplot(x = red['quality'].value_counts().index, y = red['quality'].value_counts()) plt.show()
Python
복사