새소식

데이터분석/다섯째주

EDA : 시각화 - matplotlib

  • -
728x90

 

https://matplotlib.org/stable/gallery/index

  • 파이썬의 대표 시각화 도구
  • matplotlib은 plt로 많이 naming하여 사용한다.
  • Jupyter Notebook 유저의 경우 matplotlib의 결과가 out session에 나타나는 것이 유리하므로,  %matplotlib inline 옵션을 사용한다.

 

 

 

import matplotlib.pyplot as plt # Jupyter Notebook 사용시 # plt.show()를 하지 않아도 자동으로 생성되도록 만든다. # %matplotlib inline # 위의 보다는 %matplotlib inline 아래 내용으로 사용할 것을 권고한다. get_ipyhon().run_line_magic('matplotlib', 'inline')

 

  • [ 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을 알파벳 순서로 그린다.

 

 

  • 그래프 사이즈 : figsize
    사이즈 단위는 inch 이다.

 

 

  • 선 스타일 옵션
    색상 = 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()

-- 출력 --

 

 

 

  • bins   = x축 간격
  • color   = 색상
  • alpha   = 그래프 바의 투명도

 

 

  • s   = 사이즈
  • c   = 컬러맵
  • marker   = 점의 모양 지정, ' >  < o  등등'
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()

-- 출력 --

 

 

 

 

 

 

  • 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()

-- 출력 --

 

 

 

 

 

  • 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)는 그래프에 데이터의 종류를 표시하기 위한 텍스트이다.

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()

-- 출력 --

 

 

 

 

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()

-- 출력 --

 

 

 

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>

 

 

 

matplotlib 을 가져와서 사용한다.

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.plot.html

  • 데이터(컬럼)가 많은 경우 정렬한 후 그리는 것이 효과적일 때가 많다.

 

  • [ 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    = 컬럼을 알파벳 순서로 그림

 

 

 

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.