본문 바로가기
Python/Matplotlib

히스토그램(histogram)의 옵션(키워드인자) 상세사항 - matplotlib(18)

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

파이썬 버전 3.7 기준

matplotlib 버전 3.1.0 기준



  히스토그램(histogram)의 키워드 인자 상세사항 


본 포스팅에서는 hist()함수 입력 키워드인자에 대한 상세 설명를 다룬다.

산포그래프의 기초적인 작섭법은 선행포스팅(링크)를 참고하도록 한다.

 

  hist(x, bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, normed=None, *, data=None, **kwargs)


막대그래프(histogram, 히스토그램)를 그리는 함수이다.


입력변수 x의 히스토그램을 계산하고 그려준다. 

이 함수는 (n, bins, patches)를 반환하고, 여러 데이터가 입력되어있는 경우에는 ([n1, n2, ...], bins, [patches0, patches1, ...])를 반환한다. 

이미 넣어진(already-binned) 데이터의 히스토그램을 그리기위한 weight 파라미터에 대한 자료를 보는 것이 권장된다.


열(column)이 데이터셋이라면 데이터는 x를 통해 잠재적으로 다른 길이를 가지거나 2차원 ndarray의 데이터셋의 리스트로서 제공되어질 수 있다. 

ndarray형태는 리스트 형태로도 전달될 수 있다는 사실을 참고하자.


마스크 배열(Masked array)는 지원되지 않는다.


bin과 bar의 차이?

아래 설명에서는 막대라는 한글 용어에서 bin과 bar가 혼용되어 사용되어진다.
먼저 bin은 데이터가 가지는 x축의 영역이다.
bar는 plot에서 가시적으로 보여주는 막대를 의미한다.
일반적으로 두개는 같지만 사용옵션에 따라 충분히 달라질 수 있으므로 유의한다. 



 x

입력 형태: (n, ) 배열(array), (n,) 배열의 시퀀스


설명

필수 입력 요소이다.

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

이 값은 하나의 배열 혹은 길이가 같지 않아도 되는 배열의 시퀀스를 입력받는다. 



 bins

입력 형태: int, sequence, str


설명

선택적으로 입력이 가능하다.

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

  - 쉽게 설명하면 막대의 너비를 조절하는 변수이다.(numpy.histogram과 일치한다.)

각각의 다른 자료형에 따라 이 변수의 영향이 약간 변화한다.

 

정수(int)가 입력될 경우, 각 막대의 너비는 동일하다. 
입력된 bins+1로 막대의 너비(모서리)가 계산되고 반환된다. 

시퀀스(sequence)가 입력될 경우 막대의 너비를 직접 설정할 수 있게 해준다.
예를들어 bins에 아래와 같이 입력되었을 경우를 예를들어 본다.

[1, 2, 3, 4]

첫번째 막대는 [1,2)로 너비를 설정(1을 포함 2를 제외)한다.

두번째 막대는[2,3)로 너비를 설정(2를 포함 3을 제외)한다. 

세번째(마지막) 막대는[3,4]로 너비를 설정(3,4를 포함) 한다. 
이를 응용하면 각 범위별로 막대의 너비를 다르게 설정할 수 있다. 

문자열(str)을 입력받는 경우에는 'auto', 'sturges', 'fd', 'doane', 'scott', 'rice', 'sqrt'가 입력이 가능하다.
각각의 문자열 입력에 대한 설명은 numpy.histogramhistogram_bin_edges를 참조한다.

기본값은  rcParams["hist.bins"]로 설정되어 있다.


 range

입력 형태: tuple, None


설명

선택적으로 입력이 가능하다. 

막대(bin)들의 범위, 즉 x축 방향의 범위를 설정한다.

x의 최소값과 최대값보다 작거나 큰 값을 입력받는 것이 가능하다. 
이 값은 막대 자체에는 영향을 주지 않는다.

기본값은 None이며, 이 값이 입력되지 않은 경우 범위는 (x.min(), x.max())이다.


 density

입력 형태: bool


설명

선택적으로 입력이 가능하다. 

만약 True일 경우, 반환하는 튜플에서 첫번째 요소의 값들을 확률밀도(probability density)를 형성시키기 위해 정규화시킨다.
따라서 히스토그램 값들의 면적(적분)값은 1이된다. 
이 값은 요소의 수로 나누어 정규화되는것이 아니라 막대(bin)의 너비를 이용하여 정규화되므로 이에 유의하도록한다.

만약에 stacked 역시 True일 경우, 히스토그램의 합은 1로 정규화된다.


이 키워드 인자와 normed의 기본 값은 None이며, 만약 둘중 하나라도 입력이 된다면, 그 값을 사용한다.

만약 둘 다 입력이 되지 않는다면, 그 때에는 False로 여겨진다. 


normed와 desity 둘 다 동시에 입력할 경우에는 에러가 발생하므로 주의를 요한다.



 weights

입력 형태: (n,) array_like, None


설명

선택적으로 입력이 가능하다. 

가중치(weight)의 배열이며, x와 같은 형상을 가진다. 
x의 각 값은 입력된 가중치에 따른 값을 가진다.
만약 normed 혹은 density가 True가 입력될 경우 가중치 값은 정규화되어 출력된다.


기본값은 None이다.


numpy.histogram을 사용한다면, 이 파라미터는 이미 입력된 데이터의 히스토그램을 그릴 때 사용되어질 수 있다. 

(혹은 bar() 함수를 사용하는 것도 가능하다.)



 cumulative

입력 형태: bool


설명

선택적으로 입력이 가능하다. 

True가 입력될 시, 히스토그램이 x축 양의 방향으로 과거의 데이터들을 포함하여 값을 가지도록 설정한다.
마지막 값은 모든 데이터세트를 가지게 된다. 
 - 쉽게 설명하면 x축 양의 방향으로 축적값을 가지게 설정한다.

만약 normed 혹은 density가 True일 경우 정규화된 값이 입력되기 때문에 마지막 값은 항상 1이되게된다. 
만약 가중치 값이 음의 값일때, 그 다음 축적값은 이를 반영하여 더 작아지게 된다. 

기본값은 False이다.



 bottom

입력 형태: array_like, scalar, None


설명

선택적으로 입력이 가능하다. 

각 막대(bin)의 하부 베이스라인의 위치를 입력받는다. 

스칼라(scalar)일 경우, 각 막대의 베이스라인은 같은 크기로 이동된다.

배열일 경우 각 막대의 베이스라인을 독립적으로 이동시킬 수 있다.

  - 단, 이 경우 입력 배열의 길이는 bins 키워드 인자의 입력 길이와 같아야한다.


기본값은 None이며, 베이스라인의 위치는 0이다.

  


 histtype

입력 형태: str( {'bar', 'barstacked', 'step', 'stepfilled'} )


설명

선택적으로 입력이 가능하다. 

히스토그램의 형태를 입력받는다.
  - 'bar'는 전통적인 막대(bar) 형태의 히스토그램이다. 만약 다수의 데이터가 주워진다면 막대들은 나란히 위치하게 된다.
  - 'barstacked'는 여러 데이터가 쌓인 형태의 막대(bar) 형태 히스토그램이다.
  - 'step'은 내부가 비어있는 lineplot을 만든다.
  - 'stepfilled'는 내부가 차있는 lineplot을 만든다.


기본값은 'bar'이다.



 align

입력 형태: str( {'left', 'mid', 'right'} )


설명

선택적으로 입력이 가능하다. 

히스토그램을 어떻게 출력할지 제어한다.
  - 'left'는 막대(bar) 중앙의 위치가 기존 막대(bin)의 왼쪽으로 설정된다.
  - 'right'는 막대(bar) 중앙의 위치가 기존 막대(bin)의 오른쪽으로 설정된다.
  - 'mid'는 막대(bar) 중앙의 위치가 기존 막대(bin)의 중앙으로 설정된다.


기본값은 'mid'이다.



 orientation

입력 형태: str( {'horizontal', 'vertical'} )


설명

선택적으로 입력이 가능하다. 

만약 'horizontal'이 입력될 경우 barh(가로 타입 막대그래프)가 사용되어진다.

이때 막대의 바닥부분은 왼쪽 모서리가 되게 된다.


기본값은 'vertical'이다.


 rwidth

입력 형태: scalar, None


설명

선택적으로 입력이 가능하다. 

bin의 상대적인 분율로서 bar의 너비를 설정한다.
histtype이 'step'이거나 'stepfilled'일 경우 무시된다.

기본값은 None이며, 이 경우 자동으로 width를 계산한다.


 log

입력 형태: bool


설명

선택적으로 입력이 가능하다. 

True일 경우, 히스토그램의 축이 로그스케일(log scale)로 설정된다. 
만약 log가 True 이면서 x가 1차원 배열일 경우, 비어있는 bin들은 필터링되어지며 오직 비어있지 않은 값들만 반환되어진다.


기본값은 False이다.



 color

입력 형태: color, color의 array_like, None


설명

선택적으로 입력이 가능하다. 

히스토그램 막대(bar)의 색을 설정해준다.
color spec이나 color spec의 시퀀스를 입력하여 색을 설정할 수 있다. 

기본값은 None이고 기본 선컬러 시퀀스를 사용한다.



 label

입력 형태: str, None


설명

선택적으로 입력이 가능하다. 

문자열(str) 혹은 문자열(str)의 시퀀스(sequence)를 입력받는다.
이는 각 데이터세트에 라벨을 매치시킨다.
막대차트(bar chart)는 데이터세트당 다수의 패치(patch)를 발생시킨다.
그러나 오직 첫째 패치만 라벨을 가지며, 이는 레전드(legend) 커맨드가 예상가능하도록 작동하게 하기 위함이다.

기본값은 None이다.


 stacked

입력 형태: bool


설명

선택적으로 입력이 가능하다. 

True일 경우, 다수의 데이터를 쌓아 히스토그램을 표현할 수 있다. 
False일 경우, 
  - histtype을 'bar'를 사용하면 데이터가 쌓이지 않고 나란히 배치되게 된다. 
  - histtype을 'step'를 사용하면 데이터가 쌓이지 않고 겹쳐져서 배치되게 된다. 

기본값은 False이다.


 normed

입력 형태: bool


설명

선택적으로 입력이 가능하다. 

사용되지 않을 것이며, density 키워드 인자를 사용하자.



 **kwargs

설명

히스토그램을 편집하기 위해 Patch 속성이 추가적으로 입력 가능하다. 




 


 

 

 참고자료

  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

 

 

 

 



반응형

댓글