본문 바로가기
Python/Matplotlib

파이썬에서 히스토그램(histogram)의 작성법 - matplotlib(17)

by 콩돌 2019. 5. 20.
반응형

파이썬 버전 3.7 기준

matplotlib 버전 3.1.0 기준



  파이썬에서 히스토그램(histogram)의 작성법


본 포스팅에서는 hist()함수의 작성법에 대한 설명과 히스토그램(histogram)을 직접 작성하는 예제를 다뤄보도록 한다.

히스토그램의 입력 인자에 대한 상세 설명은 뒷포스팅(링크)를 참고하도록한다.


먼저 히스토그램을 간단히 설명하면,

도수 분포의 상태를 막대 모양으로 표현한 그래프이다



  히스토그램(histogram)의 작성 방법


  히스토그램의 단순한 작성 형식

먼저 단순하게 히스토그램의 작성형식을 설명하자면 아래와 같다.


작성 형식)

# 하나의 데이터세트를 입력할 경우

(n, bins, patches)=hist(x, bins=None, density=None, weights=None, cumulative=False)


# 다수의 데이터세트를 입력할 경우

([n1, n2, ...], bins, [patches0, patches1, ...])=hist(x, bins=None, density=None, weights=None, cumulative=False)


x (필수 입력)

  - 배열 혹은 배열들로 구성된 시퀀스를 입력받는다.

  - 데이터를 넣고자 하는 x축 위치를 설정한다.

  - x축 배열들의 시퀀스를 입력할 시, 각 배열들의 길이는 똑같을 필요는 없다.

    + 하지만, weights에 입력되는 배열들의 시퀀스는 똑같은 형상이어야 하므로 주의하자.

bins

  - 해당 막대의 영역(bin)를 얼마나 채우는지 결정해주는 변수이다.

  - 정수가 들어가면 해당 정수+1을 범위로 나눈 값으로 너비를 입력한다.

density

  - 확률밀도를 설정하기 위해 가중치 데이터를 정규화한다.

weights

  - 각 x 값에서의 가중치 데이터이다. 

    + 쉽게 설명하면 히스토그램에서 y축 값이라 여기면된다.

  - 따라서, x에 입력된 배열 혹은 배열들로 구성된 시퀀스와 동일한 형상(shape)이어야 한다.

cumulative

  - bool 자료형을 입력 받는다.

  - True일 경우, x방향으로 진행할 수록 가중치(weight) 데이터가 축적되어 그래프를 그리며, 해당 값을 반환한다.

    + 따라서, density가 True일 경우 가장 끝의 값은 1이다.



  히스토그램의 단순한 작성 예제

히스토그램 작성 함수인 hist()와 입력 키워드 인자에 대해서는 다음 포스팅(링크)에 자세히 설명하였다.

이 섹션에서는 단순하게 히스토그램을 작성해보는 스크립트 예제를 작성해본다. 


먼저 X는 0에서 num-1으로 설정된 변수까지 1씩 증가시켜 형성되게 하였다.

W에는 1에서 num*2까지 존재하는 정수 num개를 랜덤하게 추출하게 설정하였다.


히스토그램을 그리기 위한 hist()함수의 입력으로 x축에는 X값을 입력하였다.

bins에는 num을 입력하여 num+1으로 나눈 값이 막대(bin)의 너비가 되도록 설정하였다.

weights에는 W을 입력하여 각각의 X 값에 가중치를 넣었다.

densityFalse을 입력하여 데이터를 정규화시키지 않았다.

cumulative 역시 False을 입력하여 축적값을 적용하는 옵션을 고려하지 않았다.  

  ※ densitycumulative에 대한 내용은 해당 예제에서 True로 변경하여 손쉽게 확인할 수 있다.


이 외에 range키워드 인자를 통해 x축에서 데이터의 범위를 설정하였고, color함수를 통해 막대의 색을 변경하였다.

edgecolor, linewidth를 통해 막대의 테두리의 선의 색과 두께를 설정하여 각 막대끼리 잘 구분되도록 하였다.

이 부분의 키워드 인자는 bar() 함수의 입력인자와 거의 동일하게 사용할 수 있다.

해당 부분에 대한 설명은 막대그래프관련포스팅(링크)에서 차트의 "bar()함수의 막대 편집을 위한 키워드 인자" 섹션에 있다.


아래 예제에서 다양한 함수들을 적용하여 플롯을 보기좋게 꾸몄는데 다양한 함수들에 대한 설명은 선행 포스팅(링크)를 참고하도록한다.  


작성 예제) histogram_ex.py

import matplotlib.pyplot as plt

import numpy as np


# 입력 데이터

num = 10

X = np.arange(num)

W = np.random.randint(1, num*2, num)


# plot 입력

hist = plt.hist(X, bins=num, weights=W, density=False, cumulative=False, label='A',

                range=(X.min(), X.max()), color='r', edgecolor='black', linewidth=1.2)


# 그래프의 타이틀과 x,y축 라벨링

plt.title('scatter', pad=10)

plt.xlabel('X axis', labelpad=10)

plt.ylabel('Y axis', labelpad=10)


# 틱설정

plt.minorticks_on()

plt.tick_params(axis='both', which='both', direction='in', pad=8, top=True, right=True)


# 플롯 출력

plt.show()





 


 

 

 참고자료

  https://matplotlib.org/tutorials/introductory/pyplot.html#sphx-glr-tutorials-introductory-pyplot-py

  https://matplotlib.org/api/_as_gen/matplotlib.pyplot.hist.html#matplotlib.pyplot.hist

 

 

 

 


반응형

댓글