데이터분석/다섯째주
EDA : 시각화 - matplotlib
핑크댕댕이
2023. 10. 28. 03:38
728x90
목차
Matplotlib 패키지
https://matplotlib.org/stable/gallery/index
- 파이썬의 대표 시각화 도구
- matplotlib은 plt로 많이 naming하여 사용한다.
- Jupyter Notebook 유저의 경우 matplotlib의 결과가 out session에 나타나는 것이 유리하므로, %matplotlib inline 옵션을 사용한다.
matplotlib.pyplot : 2D 그래프
import matplotlib.pyplot as plt
# Jupyter Notebook 사용시
# plt.show()를 하지 않아도 자동으로 생성되도록 만든다.
# %matplotlib inline
# 위의 보다는 %matplotlib inline 아래 내용으로 사용할 것을 권고한다.
get_ipyhon().run_line_magic('matplotlib', 'inline')
Basic Attributes
- [ parameters ]
alpha = 투명도
kind = 그래프 종류 'line', 'bar', 'barh', 'kde'
logy = Y축에 대해 Log scaling
use_index = 객체의 색인을 눈금 이름으로 사용할지 여부
rot = 눈금 이름 돌리기 (rotating) 0 ~ 360
xticks, yticks = x, y축으로 사용할 값
xlim, ylim = X, Y축의 한계
grid = 축의 그리드를 표현할지 여부 - [ functions ]
subplots = 각 column에 독립된 subplot 그리기
sharex, sharey = (subplots=True) 이면 같은 X,Y축을 공유하고 눈금과 한계를 연결
figsize = 생성될 그래프의 크기를 tuple로 지정
title = 그래프의 제목 지정
legend = subplot의 범례 지정
sort_columns = column을 알파벳 순서로 그린다.
그래프 도화지 생성 : figure( )
plt . figure ( )
plt . figure ( figsize=(가로, 세로) )
- 그래프 사이즈 : figsize
사이즈 단위는 inch 이다.
그래프 출력 : show( )
plt . show( )
선그래프 그리기 : plot( )
plt . plot ( 데이터 )
plt . plot ( 데이터, '선스타일', label='범례에 표시될 이름', drawstyle=' ' )
- 선 스타일 옵션
색상 = b(파란색), g(초록색), r(빨간색), c(청록색), y(노란색), k(검은색), w(흰색)
마커 = o(원), v(역삼각형), ^(삼각형), s(네모), +(플러스), .(점)
조합예시 ) k-- , c. , - drawstyle
steps-post : 계단식 선 모양
import matplotlib.pyplot as plt
plt.figure()
plt.plot(np.random.randn(50).cumsum(), 'k--')
# cumsum은 random하게 생성된 값들의 누적
# randn은 정규화된 난수 발생으로 즉, 정규화된 난수를 누적그래프로 만들었다.
# k는 검은색을 뜻하며, --를 붙여서 점선으로 만든다.
plt.show()
-- 출력 --
import matplotlib.pyplot as plt
data = np.random.randn(30).cumsum()
plt.figure()
#그래프 겹쳐서 그리기
plt.plot(data, 'k--', label='Default')
plt.plot(data, 'k-', drawstyle='steps-post', label='steps-post')
plt.legend(loc='best')
plt.show()
-- 출력 --
import matplotlib.pyplot as plt
import numpy as np
# 삼각함수 그래프 그리기
t = np.arange(0, 12, 0.01)
y = np.sin(t)
def drawGraph():
plt.figure(figsize=(10, 6))
plt.plot(t, y, label='sin')
plt.plot(t, np.cos(t), label='cos')
plt.grid(True)
plt.legend() #범례표시, plot 함수의 label 옵션에 있는 값을 표시
plt.xlabel('time')
plt.ylabel('Amplitude') #진폭
plt.title('Example od sinewave')
plt.show()
drawGraph()
-- 출력 --
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0, 5, 0.5)
def drawGraph():
plt.figure(figsize=(10, 6))
plt.plot(t, t, 'r--')
plt.plot(t, t ** 2, 'bs') #blue square
plt.plot(t, t ** 3, 'g^')
plt.show()
drawGraph()
-- 출력 --
import matplotlib.pyplot as plt
t = list(range(0, 7))
y = [1, 4, 5, 8, 9, 5, 3]
plt.figure()
plt.plot(t, y,
color='red',
linestyle='-',
marker='o',
markerfacecolor='blue',
markersize=10
)
plt.xlim([-0.5, 6.5])
plt.ylim([0.5, 9.5])
plt.show()
-- 출력 --
히스토그램 hist( )
plt . hist( 데이터, bins=, color=' ', alpha= )
- bins = x축 간격
- color = 색상
- alpha = 그래프 바의 투명도
점그래프 scatter( )
plt . scatter( x축 데이터, y축 데이터, s=, c=, marker=' ' )
- s = 사이즈
- c = 컬러맵
- marker = 점의 모양 지정, ' > < o 등등'
컬러차트 출력 colorbar( )
plt . colorbar( )
import matplotlib.pyplot as plt
import numpy as np
t = np.array(range(0, 10))
y = np.array([9, 8, 7, 9, 8, 3, 2, 4, 3, 4])
colormap = t
plt.figure(20, 6)
plt.scatter(t, y, s=150, c=colormap, marker='>')
plt.colirbar()
plt.show()
-- 출력 --
막대그래프 bar( ) , barh( )
원그래프 pie( )
plt . pie( 데이터, explode=[ ], autopct='%.1f%%', labels=' ', colors=[ ],
shadow=True, startangle= )
- explode
원에서 떨어져나오게 하는 정도 - labels
각 데이터별 라벨링 - colors
각 데이터별 컬러 지정 - autopct
자동으로 퍼센트를 계산하여 출력
출력 형식 지정: % + . 소수점 자릿수 + f (숫자데이터 자료형태) + % + % (텍스트) - statrangle
데이터 출력 시작 각도 설정 - shadow
그림자 설정, default값은 False
import matplotlib.pyplot as plt
data=[15,30,45,10]
labels=['취업','결혼','출산','건강']
colors=["yellow","gold","skyblue","lightcoral"]
ex = (0.1,0,0,0) # 떨어져나오게 하는것
plt.figure()
plt.pie(data,explode=ex, autopct="%.1f%%",labels=labels, colors=colors, shadow=True, startangle=90)
plt.show()
-- 출력 --
다중 그래프 그리기 : subplot( ) , subplots( )
plt . subplot ( 행 개수, 열 개수, 순번)
figure변수 , plt변수 = plt . subplots ( 행 개수, 열 개수 )
figure변수 , plt변수 = plt . subplots ( 행 개수, 열 개수, sharex=True, sharey=True )
plt변수[ 행위치, 열위치 ] . plot( )
plt변수[ 행위치, 열위치 ] . hist( )
plt변수[ 행위치, 열위치 ] . scatter( )
- sharex, sharey
x, y 축 공유 - figure변수
그래프 설정에 사용함. - plt변수
그래프 순번 설정해서 그래프 그릴때 사용함.
plt변수[행 위치, 열 위치] . plot (데이터)
import matplotlib.pyplot as plt
plt.figure()
plt.subplot(2, 2, 1)
plt.plot(np.random.randn(50).cumsum(), 'k--')
plt.subplot(2, 2, 2)
plt.hist(np.random.randn(100), bins=20, color='k', alpha=0.3)
plt.subplot(2, 2, 3)
plt.scatter(np.arange(30), np.arange(30) + 3 * np.random.randn(30))
plt.show()
-- 출력 --
import matplotlib.pyplot as plt
plt.figure()
# 서브플랏 간의 간격을 주지 않은 그래프를 생성하는 코드
fig , axes = plt.subplots(2,2, sharex=True, sharey=True)
for i in range(2):
for j in range(2):
axes[i,j].hist(np.random.randn(500), bins=50, color='k', alpha = 0.5)
plt.subplots_adjust(wspace=0, hspace=0)
plt.show()
-- 출력 --
import matplotlib.pyplot as plt
fig = plt.figure() # 도화지 생성
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax1.plot(np.random.randn(50).cumsum(), 'k--')
ax2.hist(np.random.randn(100),bins=20, color='k', alpha=0.3)
ax3.scatter(np.arange(30) ,np.arange(30) + 3 * np.random.randn(30))
-- 출력 --
범례(레이블) 표시 : legend( )
범례 (Legend)는 그래프에 데이터의 종류를 표시하기 위한 텍스트이다.
import matplotlib.pyplot as plt
data = np.random.randn(30).cumsum()
plt.plot(data, 'k--',label='Default')
plt.plot(data, 'k-', drawstyle = 'steps-post', label ='steps-post')
plt.legend(loc = 'best') # loc : 범례의 위치
# 축에대한 범례를 추가하려면 ax.legend를 호출
plt.show()
-- 출력 --
그래프 제목 표시 : title( )
x축 타이틀 표시 : xlabel( )
y축 타이틀 표시 : ylabel( )
import matplotlib.pyplot as plt
plt.figure()
plt.plot([10,20,30,40], [1,4,9,16],
color="blue",
linewidth=5,
linestyle="--",
marker="o",
ms=15)
# 그래프 색깔, 그래프 굵기, 그래프스타일, 그래프마커, 마커굵기
plt.xlabel("x axis") # x축 이름
plt.ylabel("y axis") # y축 이름
plt.xticks([0,10,20,30,40,50],color = "red",rotation=30) # x축 눈금, 눈금돌리기
plt.yticks([0,5,10,15,20],color = "red") #y축 눈금
plt.show()
-- 출력 --
그래프 저장하기 : savefig( )
import matplotlib.pyplot as plt
plt.plot(np.random.randn(1000).cumsum(), 'k', label='one')
plt.plot(np.random.randn(1000).cumsum(), 'k--', label='two')
plt.plot(np.random.randn(1000).cumsum(), 'k.', label='three')
plt.legend(loc='best')
plt.show()
plt.savefig("fig_saved.svg")
-- 출력 --
<Figure size 432x288 with 0 Axes>
Pandas에서 plot 그리기
matplotlib 을 가져와서 사용한다.
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.plot.html
- 데이터(컬럼)가 많은 경우 정렬한 후 그리는 것이 효과적일 때가 많다.
데이터프레임변수명 [ '컬럼명' ] . plot ( kind=' ', figsize=(가로 , 세로), grid=True, )
데이터프레임변수명 [ '컬럼명' ] . sort_values() . plot ( kind=' ',
figsize=(가로 , 세로), grid=True, title=' ')
Basic Attributes
- [ Series . plot( ) 인자 ]
label = 그래프의 범례이름
ax = 서브플롯 객체
style = "ko--" 와같은 그래프 스타일 문자열
alpha = 그래프 투명도 (0~1)
kind = 그래프 종류 'area', 'bar', 'barh', 'density', ' hist', 'kde', ' line' ,'pie'
logy = y축에 대한 로그 스케일링
use_index = 객체의 색인을 눈금이름으로 사용할지 여부
rot = 눈금 이름을 로테이션 (0~360)
xticks = x축으로 사용할 값
yticks = y축으로 사용할 값
xlim = x축 한계 : [0,10]
ylim = y축 한계
- [ DataFrame . plot() 메서드 인자 ]
figsize = 생성될 그래프 크기 튜플로 지정
title = 그래프의 제목을 문자열로 지정
legend = 서브플롯의 범례 추가, loc 옵션으로 위치 설정
sort_columns = 컬럼을 알파벳 순서로 그림
반응형