안녕하세요~ 꽁냥이에요.
히스토그램(Histogram)은 수치형 데이터의 분포를 시각적으로 표현해주는 고마운 친구인데요. 이번 포스팅에서는 Matplotlib을 이용하여 히스토그램을 그려보는 방법에 대해서 알아보겠습니다. 여기서 다루는 내용은 다음과 같습니다.
1. 기본 히스토그램 그리기
Matplotlib에서는 hist를 이용하여 히스토그램을 그릴 수 있습니다. hist의 기본적인 사용법은 다음과 같습니다.
hist( x, bins , density=False, . . . )
x는 히스토그램을 그릴 데이터 배열, bins는 막대기 수, density는 False인 경우 y축을 도수로, True인 경우 y축을 비율로 표시합니다. 코드를 통하여 확인해볼까요?
import numpy as np
import matplotlib.pyplot as plt
mu, sigma = 5, 1
x = mu + sigma * np.random.randn(1000)
fig = plt.figure(figsize=(8,8)) ## 캔버스 생성
fig.set_facecolor('white') ## 배경색 설정
plt.hist(x, 20) ## 히스토그램
plt.title('Histogram')
plt.show()
line 4~5
히스토그램을 그릴 데이터를 생성합니다. 평균이 5, 분산이 1인 정규분포 샘플을 뽑아주었습니다.
lline 10
hist에 위에서 만든 샘플과 막대기 수를 인자로 넣어줍니다.
위 코드를 실행하면 아래와 같이 히스토그램이 잘 그려지는 것을 확인할 수 있습니다.
2. 히스토그램 꾸미기
hist에서는 히스토그램을 꾸밀 수 있는 인자를 기본적으로 제공하고 있습니다. 히스토그램의 막대 색상은 color, 테두리 색상은 edgecolor로 지정할 수 있습니다. 꽁냥이는 히스토그램의 색상은 초록색으로하고 검정 테두리가 표시되도록 했습니다.
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(101)
mu, sigma = 5, 1
x = mu + sigma * np.random.randn(1000)
fig = plt.figure(figsize=(8,8)) ## 캔버스 생성
fig.set_facecolor('white') ## 배경색 설정
plt.hist(x, 20, color='y', edgecolor='k') ## 히스토그램
plt.title('Histogram')
plt.show()
또한 histtype를 통해 히스토그램의 유형을 지정할 수 있습니다. histtype에 들어갈 수 있는 값은 'bar', 'barstacked', 'step', 'stepfilled'이며 기본 설정값은 'bar'입니다.
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(101)
mu, sigma = 5, 1
x = mu + sigma * np.random.randn(1000)
fig = plt.figure(figsize=(8,8)) ## 캔버스 생성
fig.set_facecolor('white') ## 배경색 설정
plt.hist(x, 20, histtype='bar', color='g', edgecolor='k') ## 히스토그램
plt.title('Histogram')
plt.show()
아래 그림은 histtype가 각각 'barstacked', 'step', 'stepfilled'인 경우를 나타낸 것입니다.
'barstacked'는 여러 데이터 배열에 대하여 스택 히스토그램을 그릴 때 사용되므로 데이터 배열이 1개인 경우에는 'bar'와 똑같이 동작합니다. 'step'인 경우에는 히스토그램 색상을 지정했다하더라도 하얗게 표시됩니다.
이번엔 일종의 특별편인데요~!! 히스토그램에 그라디언트를 입혀보겠습니다. 먼저 색상을 골라줍니다. 색상은 구글에 'pick color'를 검색하면 맨위에 색상을 선택할 수 있는 화면이 나옵니다.
이때 빨간 네모안에 hsv 숫자를 기억해야합니다. 여기서 h=31, s=95, v=97이 됩니다. s는 사용하지 않을 것이므로 생략해도 됩니다.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcl
from matplotlib.colors import LinearSegmentedColormap
np.random.seed(101)
mu, sigma = 5, 1
x = mu + sigma * np.random.randn(1000)
fig = plt.figure(figsize=(8,8)) ## 캔버스 생성
fig.set_facecolor('white') ## 배경색 설정
_, bins, patches = plt.hist(x, 20) ## 히스토그램
bin_centers = 0.5*(bins[:-1]+bins[1:]) ## 막대의 위치에 따라서 색 그라디언트를 입힌다.
## 막대의 위치를 0~1로 만들어준다.
col = bin_centers - min(bin_centers)
col /= max(col)
## hsv 색상을 선택한다.
h = 31
v = 97
## hsv 색상을 rgb 색상으로 바꿔준다.
cv = [mcl.hsv_to_rgb((h*1/(2*180),0.2,v/100)),
mcl.hsv_to_rgb((h*1/(2*180),1,v/100)),
mcl.hsv_to_rgb((h*1/(2*180),0.2,v/100))]
cmap=LinearSegmentedColormap.from_list('field_cmap', cv, N=256,gamma=1)
for c, p in zip(col, patches):
plt.setp(p, "facecolor", cmap(c))
plt.title(f'Histogram',fontsize=20)
plt.show()
line 23~24
앞서 선택했던 h와 v값을 지정합니다.
line 26~28
matplotlib은 hsv 색상을 인식하지 못합니다. 따라서 rgb로 바꾸어주어야합니다. 색상의 투명도는 s값을 이용하여 조절할 수 있습니다. s는 0~1의 값을 가지면 숫자가 커질수록 진해지고 작을 수록 투명해집니다. 꽁냥이는 히스토그램의 중앙에서 바깥으로 갈수록 밝게하려고 하므로 중앙 s값은 1로 좌우 바깥쪽에 대한 s값은 0.2로 설정하였습니다.
line 30
color map을 만들어줍니다.
line 32~33
히스토그램에서 각 막대 위치에 대응하는 색상으로 지정해줍니다.
코드를 실행해보세요.
히스토그램에 그라디언트가 예쁘게 적용되었습니다. 짝짝~!!
이번 포스팅에서는 기본적인 히스토그램을 그리는 방법과 꾸미는 방법에 대하여 알아보았습니다. 다음 포스팅에서는 여러개 히스토그램을 그리는 방법에 대하여 알아보겠습니다. 지금까지 꽁냥이의 글 읽어주셔서 감사합니다. 안녕히 계세요~!!
'데이터 분석 > 시각화' 카테고리의 다른 글
[줄기 잎 그림(Stem Plot)] Matplotlib을 이용하여 줄기-잎 그림 그리기. (1068) | 2021.04.09 |
---|---|
[히스토그램(Histogram)] 2. Matplotlib을 이용하여 히스토그램 여러개 그리기. (0) | 2021.01.15 |
[상자 수염 그림(Box and Whisker Plot)] 2. Matplotlib을 이용하여 그룹 상자 수염 그림(박스 플롯) 그리기 (0) | 2020.12.05 |
[상자 수염 그림(Box and Whisker Plot)] 1. Matplotlib을 이용하여 상자 수염 그림 그리기 (0) | 2020.12.03 |
Matplotlib을 이용하여 레이더 차트(Radar chart) 그리기! (15) | 2020.09.28 |
댓글