MatplotIib 기본 사용

Sirius·2024년 2월 4일
1

파이썬라이브러리

목록 보기
3/3

Matplotlib

파이썬의 대표적인 시각화 라이브러리, 다양한 형태의 그래프로 데이터를 시각화 할 수 있다.
터미널에서 pip install matplotlib 커맨드로 설치하여 사용할 수 있다.


Pyplot

matplotlib의 대부분의 기능이 pyplot이라는 submodule을 기초로 한다.
주로 plt라는 alias로 import를 수행한다.

import matplotlib.pyplot as plt

plot & show

plot 함수는 기본적으로 figure상에 점들을 그리는 함수로 기본적으로 좌표와 좌표 사이에 line을 그려준다.

parameters로 x좌표의 집합 array, y좌표 집합의 array를 전달받는다.

예를 들어, (0,0),(6,250)이라는 두좌표를 잇는 선을 그리고 싶다면 인자로 [0,6],[0,250]을 전달하면 된다.

예시를 통해 확인해보자

''' simple example'''
import matplotlib.pyplot as plt 
import numpy as np

x_points = np.array([0,6])
y_points = np.array([0,250])

plt.plot(x_points,y_points)
plt.show()

# 점들을 잇는 line 대신 marker로만 plot을 표현하고 싶다면
# 3번째 인자로 ring을 의미하는 'o'를 전달해주면 된다.
plt.plot(x_points,y_points,'o')
plt.show()

실행결과

x좌표와 y좌표의 개수를 맞추어 줘야하는데, y좌표 array만 전달한다면 default로 y좌표 array의 길이에 맞추어 x좌표들이 생성된다. (ex) 0,1,2..

plt.plot(y_points)
plt.show()


marker and line

시각화의 대표적인 방법이 marker로 그리기와 line으로 그리기 이다. 그 안에서도 다양한 표현방식이 있는데 먼저 marker부터 알아보자.

plot함수에는 format string인자를 전달할 수 있는데, 앞서 'o' 도 그의 일종이다. 기본적 형식은 'marker|line|color" 로 'o','*'과 같은 marker의 모양, ':'(점선),'--' (실선), '-' (선) 등 선의 모양, 'r','g','b','y','c','m','k','w' (red,green,blue,yellow,cyan,magenta,black,white)와 같은 색깔 약어를 전달할 수 있다.

예를 들어 ':m'의 경우는 모양 marker를 사용하고 점간에 점선으로 연결하며 색상은 margenta 색인 plot을 그린다.

이 외에도 다양한 인자를 전달 할 수 있다.
markersize를 의미하는 ms, markerEdgeColor를 의미하는 mec, markerFaceColor를 의미하는 mfc인자에 적절한 값을 전달하여 원하는 표현을 할 수 있다.

color인자들의 전달값으로는 '#4CAF50'같은 hexaDecimal Notation을 전달할 수도 있고, 'hotpink'와 같은 color name을 전달할 수도 있다.

y_points = np.array([1,3,8,9])

plt.plot(y_points, "*:b",ms = 15, mec = 'y', mfc = 'c')
plt.show()

line을 그리는 경우도 다양한 인자를 전달할 수 있는데 linestyle을 의미하는 ls, linewidth를 의미하는 lw, color를 의미하는 c인자에 적절한 값을 전달할 수 있다.

y_points = [1,3,8,7]
plt.plot(y_points,ls=':',c='hotpink')
plt.show()

plt.plot(y_points,lw=15.2)
plt.show()


하나의 plot에 두 개 이상의 line을 그리기 위해서는 각기 다른 좌표집합을 가진 plot 함수를 두번 실행 후 show하는 방법이 있고, 하나의 plot함수에 각기다른 좌표집합 배열을 전부 전달하는 방법이 있다.

x1 = np.array([0,1,2,3])
y1 = np.array([1,3,8,6])
x2 = np.array([0,1,2,3])
y2 = np.array([3,2,8,9])
plt.plot(x1,y1)
plt.plot(x2,y2)
plt.show()

plt.plot(x1,y1,x2,y2)
plt.show()


label & grid

plot의 x축과 y축별로 label을 표현할 수 있고, grid를 추가해줄 수도 있다.

xlabel함수와 ylabel함수, title함수를 통해 설정할 수 있고, 각 함수들은 fontdict라는 인자에 적절한 값을 전달해주어 label들의 형태를 지정할 수 있다. title함수의 경우 loc 인자에 'center'등의 값을 전달하여 포지션을 정할 수 있다.

grid 함수를 통해 격자표현을 figure상에 추가할 수 있고, axis 인자에 'x'또는 'y'를 입력해 줄 수 있다. default는 모든 축이다. 또한 line을 표현하는 인자 처럼, color, linewidth, linestyle등의 인자를 사용하여 꾸며줄 수 있다.

x_points = np.array([1,2,3,5,4,2])
y_points = np.array([3,9,11,3,9,1])

fonts = {'family':'serif','color':'k','size':15}
plt.xlabel("x axis",fontdict = fonts)
plt.ylabel("y axis",fontdict = fonts)
plt.title("Title",loc = 'center',fontdict=fonts)
plt.plot(x_points,y_points)
plt.grid(axis = 'y', color ='m', linestyle = '--', linewidth = 0.5)
plt.show()


subplot

subplot함수를 통해 여러개의 그래프를 그려줄 수 있다.

3개의 인자를 기본으로 받는데 처음 두 인자는 행,열의 정보 즉, subplot의 사이즈에 관련된 인자를 받고, 마지막 인자는 current plot 즉 현재 그리고자하는 plot의 index를 인자로 받는다. index는 1부터 시작한다.

각 plot별로 title을 그려줄 수 있고, suptitle함수를 통해 전체 제목을 명시할 수 있다.

x1 = np.array([1,2,3,7])
y1 = np.arange(10,50,10)
fonts = {'family':'serif','color':'b','size':10}

plt.subplot(2,2,1)
plt.plot(x1,y1)
plt.title("plot 1",loc = 'center',fontdict=fonts)

x2 = np.array([6,7,8,9])
y2 = np.array([1,2,3,4])

plt.subplot(2,2,2)
plt.plot(x2,y2)
plt.title("plot 2",loc= 'center',fontdict=fonts)

x3 = np.array([12,4,24,1])
y3 = np.array([10,39,29,19])

plt.subplot(2,2,3)
plt.plot(x3,y3)
plt.title("plot 3",loc= 'center',fontdict=fonts)


x4 = np.array([10,20,30,40])
y4 = np.array([1,2,7,9])

plt.subplot(2,2,4)
plt.plot(x4,y4)
plt.title("plot 4",loc= 'center',fontdict=fonts)

plt.suptitle("subplots")
plt.show()


scatter plot & bar plot

선과 marker표현 이외에도 다양한 그래프 표현이 가능하다.

scatter plot과 bar plot또한 기본적으로 x scale과 y scale관련 인자를 전달 받는데 , bar plot의 경우 주로 x-scale의 경우 categorized 변수를 전달받는다.

먼저 scatter plot의 경우 여러 개의 scatter 실행 시 default로 각기 다른 색이 주어지나 color인자에 색상값을 전달 할 수 있다. 점 별로 다른 색을 원할 경우, c 인자에 점 개수와 맞춘 색상 array를 전달하여 할 수 있다. 또한 s 인자에 sizes 배열을 전달하여 점 별 크기를 달리 할 수 있다. 추가적으로 alpha인자에 0~1사이의 값을 전달하여 투명도를 조절할 수 있다.

c 값에 전달할 array로 다양한 값을 전달할 수 있지만 color에 숫자를 부여한 colormap을 사용하여 숫자값을 전달 할 수 있는데 이 때, scatter의 인자로 cmap에 사용할 colormap(nipy_spectral,viridis 등)을 전달해 주어야 한다.

x1 = np.random.randint(100,size=(100))
y1 = np.random.randint(100,size=(100))

colors = np.random.randint(100,size=(100))
sizes = 10 * colors

plt.scatter(x1,y1,c= colors, s = sizes, alpha =0.5,cmap= 'nipy_spectral')
plt.colorbar()
plt.show()

bar plot의 경우에는 color, width등의 인자를 전달 받아 plot을 그리는데
barh 함수를 사용하면 vertical이 아닌 horizontal bar를 구성할 수 있다.

이 때 barh함수는 width 대신 height인자를 사용한다.

x = ['A', 'B', 'C']
y =np.array([1,2,3])

plt.bar(x,y,color='Blue',width = 0.5)
plt.show()  


histogram & pie chart

기존의 plot들과 다르게 hist함수와 pie함수는 인자로 하나의 scale array만 전달 받는다.

hist함수의 경우 전달받은 array의 분포에 따른 histogram을 그려준다.

x = np.random.normal(174,5,1000)

plt.hist(x)
plt.show()

pie 함수의 경우 전달받은 인자 배열에서 각 성분이 차지 하는 비율을 pie chart로 그려준다.

labels array와 colors array를 전달하여 각 pie별 속성을 정할 수 있다. 이외에도 pie 별 중심으로부터 멀어진 정도를 나타내는 배열인 explode 인자, pie의 그림자 여부를 나타내는 shadow인자, 반시계 방향으로 향하는 pie startangle을 의미하는 startangle인자를 통해 다양한 표현을 할 수 있다.

legend함수를 통해 범례(label)정보를 요약할 수 있고, title인자를 주어 legend의 제목을 설정할 수 있다.

p = np.array([3,12,19,7])
colors = ['y','b','k','r']
explode = np.array([0.2,0,0,0])
labels = ['att A','att B','att C','att D']

plt.pie(p,colors=colors,labels = labels, explode= explode,shadow=True,startangle=90)
plt.legend(title = "Atts")
plt.show()  

References

https://www.w3schools.com/python/matplotlib_pyplot.asp

0개의 댓글

관련 채용 정보