Matplotlib 개요
Matplotlib 은 데이터 시각화를 위한 파이썬 라이브러리이다.
그래프 작성을 위해 만들어진 공학용 소프트웨어인 MATLAB에서 시각화를 위해 개발한 라이브러리에서 유래
공식사이트
Matplotlib — Visualization with Python
seaborn seaborn is a high level interface for drawing statistical graphics with Matplotlib. It aims to make visualization a central part of exploring and understanding complex datasets. statistical data visualization Cartopy Cartopy is a Python package des
matplotlib.org
matplotlib 를 사용할땐 주로 pyplot 이라고 하는 서브 라이브러리를 사용하며 pyplot 은 일반적으로 plt 라는 별칭으로 사용한다.
pyplot 에는 도표를 그리기위해 필요한 도구들이 포함되어있다.
# pyplot import 방법
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family'] = 'Malgun Gothic'
# 한글 폰트 세팅은 컴퓨터에 저장된 글씨체의 이름으로 한다.
matplotlib.rcParams['font.size'] = 12 # 폰트크기
matplotlib.rcParams['axes.unicode_minus'] = False
# 유니코드가 '-' 기호로 설정되는 폰트가 깨지는 것을 방지
1. 선 그래프 그리기
plot(x, y, [fmt] # 서식 지정 값, [x2], [y2], [fmt2] ... )
하나의 plot에 여러개의 좌표와 서식을 지정하면 복수개의 그래프 그리기 가능
fmt : 색상, 마커, 선 스타일 등 기본 서식을 지정하는 옵션(파라미터값)
기본적인 선 그래프 그리기
# 함수에 전달된 리스트는 자동으로 y축의 값으로 설정된다.
# x축의 값은 0부터 시작해서 1의 간격으로 자동으로 설정된 것
# 각 데이터가 표시된 marker를 지정하지 않으면 각 데이터를 선으로 연결한 그래프를 그린다.
plt.plot([0,1,2,3]) #, 'o' /'^' /'x') -> marker 선을 나타내는 방법
plt.show() # print와 유사하다.
두 개의 리스트를 전달함으로써 각각 x축의 값, y축의 값으로 설정된 그래프를 그릴 수 있다.
plt.plot([2,4,6,8],[1,16,4,9],'ro') # r 색 o marker
plt.axis([0,10,0,20]) # 축의 범위 [xmin, xmax, ymin, max]
plt.show()
스타일 활용
np.arange() 는 파이썬에서 range()와 성격이 유사하다.
하지만 파이썬에서 range는 정수만 가능했다면 numpy에서의 arange()는 실수의 값도 가능하다.(>> np.arange(0.,5.,0.2))
import numpy as np # 행렬과 벡터를 다루는 패키지
plt.plot(np.arange(6), np.arange(6)**2,
color = "red",
linestyle = "dashdot", #linestyle: solid,dashed,dotted,dashdot
linewidth = 2.5,
marker = 'o',
markeredgecolor = 'green',
markerfacecolor = 'yellow',
markersize = 6.3)
plt.show()
예시 코드
import numpy as np
x = np.linspace(0,2*np.pi,300) # 0~ 2파이 만큼 10개를 균등분할
# 첫 번째는 적색 선, 원형 마커, 실선
# 두 번째는 녹색 선, 삼각형 마커, 실점선
# 세 번째는 파란 선, 가위표 마커, 점선
plt.plot(x,np.sin(x),'ro--', x, np.cos(x),'g^-.',x,-np.sin(x),'bx:')
plt.xlim(0,2*np.pi) # x축의 범위 지정
plt.show()
예시 코드
b = blue, r = red, y= yellow
x = np.arange(10)
y = np.random.randint(0,100,10) # 발생하고자 하는 개수 지정 가능 : 차이점
plt.plot(x,y,c ="b",lw =3, ls = ":",
marker = "o", ms = 10,
mec = "r", mew = 2, mfc = "y")
plt.title("Various Style")
plt.show() # y값이 랜덤으로 나오니, 실행 할때마다 그래프가 변경 된다
제목 표시하기
title() 함수를 이용해서 그림의 제목을 표시할 수 있다.
xlabel, ylabel() 함수를 이용해서 각각 x축의 이름과 y축의 이름 표시할 수 있다.
labelpad: 축 레이블의 여백 지정(단위: pt)
plt.plot(['Jan','Feb','March'],[104.8,72.9,134.5])
plt.title('Monthly Sales Graph')
plt.xlabel('Month', labelpad = 10)
plt.ylabel('Sales',labelpad = 20)
plt.show()
범례 표시하기
plot() 함수에 label 키워드 인자를 설정함으로써 그래프의 이름을 지정할 수 있다.
이렇게 지정된 이름은 legend() 함수를 통해 범례로써 표시할 수 있다.
loc 파라미터에 튜플로 두 개의 값을 지정하면 해당 위치에 범례가 표시된다.
'best' : 겹치지 않는 영역을 찾아 범례를 표시해주는 파라미터
외에 지정 가능한 위치: 'upper right' , 'upper left' ,'lower left' , 'lower right' , 'right' , 'center' , 'center left' , 'center right' , 'lower center' , 'upper center'
legend() : 비워두게 되면 default 값은 best 이다.
a = np.arange(0,3,0.02)
c = np.exp(a) # 지수함수
d = c[::-1]
plt.plot(a,c,'r--', label = 'Model length')
plt.plot(a,d,'b:', label = 'Data length')
plt.plot(a,c+d,'g', label = 'Total message length')
plt.legend(loc= 'best', shadow = True)
plt. show()
축 눈금 지정하기
xticks(), yticks() 함수를 통해 각 축의 눈금을 설정할 수 있다.
plt.xticks(np.arange(0,2,0.5))
plt.xticks([]) # 눈금삭제
plt.plot([1,2,3,4]) # x = 1씩 증가된 값 사용
# 매개변수 xticks(표시할 눈금 x값 위치(인덱스), 명칭 , (명칭)회전각도 설정)
plt.xticks([0,1,2,3],['January','Feburary','March','April'], rotation=30)
plt.show()
Figure 객체이용
Figure 클래스는 플롯에 필요한 모든 요소를 가지고 있는 최상위 클래스이며 figure() 함수는 figure 객체를 반환한다.
여러개의 윈도우를 동시에 띄워야 하거나, 그림의 크기를 설정해야 할 때 주로 사용한다.
import matplotlib.pyplot as plt
import numpy as np
# print(plt.rcParams['figure.figsize'])
## 기본 그림 크기 : [6.4, 4.8], inch 단위
plt.figure(figsize=(10,3))
x = [1,3,5,8,12]
y = np.power(x,3) # 지수 만드는 x**3
plt.plot(x,y,'go--')
plt.show()
서브 플롯 그리기
subplot()함수를 이용해서 하나의 figure에 여러개의 그래프를 그릴 수 있다.
주요 인자: nrows, ncols, index를 지정하는 3개의 정수를 이용하여 서브플롯의 위치를 지정 가능
x1 = np.linspace(0.0,5.0) # 분할할 데이터의 수를 입력하지 않으면 기본 값은 50이다.
x2 = np.linspace(0.0,2.0)
y1 = np.cos(2*np.pi * x1)* np.exp(-x1)
y2 = np.cos(2*np.pi * x2)
#1
plt.subplot(2,1,1) # nrow = 2, ncol =1, index =1 # 2행 1열 1번째 그림
plt.plot(x1,y1,'o-')
plt.title('1st Graph')
plt.xlabel('time(s)')
plt.ylabel('Damped')
#2
plt.subplot(2,1,2)
plt.plot(x2,y2,'.-')
plt.title('2nd Graph')
plt.xlabel('time(s)')
plt.ylabel('Undamped')
plt.tight_layout()# 서브플롯의 레이아웃을 자동으로 맞춰준다
plt.show()
subplots() 함수를 이용해서 서브플롯을 그릴 수도 있다.
subplots() 함수는 Figure와 Axes 객체를 반환한다.
Axes 클래스: 공간이 확보된 이미지의 영역정보를 가지고 있다.
주요 인자
: nrows,ncols: 서브플롯의 행, 열값을 지정
: sharex,sharey: boolean값 (default:False) x,y 축 사이의 공유제어 속성
# fig, axes = plt.subplots(1, 4, sharey= True) # y 의 값을 공유해서 axes[0]
# 1행 4열이니까 열의 값을 지정 / alpha = 투명도
fig, axes = plt.subplots(2, 2)#, sharey= True) # y 축을 각자 가짐
fig.set_size_inches((16,10)) # figure 크기 설정
axes[0][0].scatter(np.random.random(100),np.random.random(100),c = 'cyan', edgecolor = 'red', alpha = 0.5 )
# axes[0].scatter(np.random.random(100),np.random.random(100),c = 'cyan', edgecolor = 'red', alpha = 0.5 )
axes[0][1].scatter(np.random.random(100),np.random.random(100),c = 'magenta', edgecolor = 'green', alpha = 0.5 )
axes[1][0].scatter(np.random.random(100),np.random.random(100),c = 'yellow', edgecolor = 'blue', alpha = 0.5 )
axes[1][1].scatter(np.random.random(100),np.random.random(100),c = 'white', edgecolor = 'black', alpha = 0.5 )
axes[0][0].set_title('subplot 0')
# axes[0].set_title('subplot 0')
axes[0][1].set_title('subplot 1')
axes[1][0].set_title('subplot 2')
axes[1][1].set_title('subplot 3')
plt.show()
주석으로 처리된 문장은 첫 번째 주석 문장인 # fig, axes = plt.subplots(1, 4, sharey= True)의 설정 방법들이다.
'국비 교육 > 데이터' 카테고리의 다른 글
[데이터 분석] Seaborn (0) | 2023.11.06 |
---|---|
[데이터 시각화] matplotlib - 2 (0) | 2023.11.04 |
[데이터 수집] Auto Crawler (0) | 2023.11.04 |
[데이터 수집] BeautifulSoup + Selenium 실습 (0) | 2023.11.02 |