matplotlib 히스토그램 그리기
plt.hist
- 히스토그램은 아주 간단하게, 값이 들어있는 list를 input으로 받아서, 제가 입력한 bin의 개수만큼 바구니로 구분하여 bar 차트로 그려주는 것을 말합니다.
-
뭐 더 말할 것이 없긴 한데…
- 다음을 합니다.
- plt.hist의 property 변경해서 넣기
- 그려진 bar 위에 글자 넣기
- 그려진 bar에 xtick 고쳐서 넣기
import matplotlib.pyplot as plt
## normal분포로 나온 값을 그대로 plt.hist에 넣어줍니다.
x = np.random.normal(0, 1, 100)
plt.figure(figsize=(10, 6))
## histogram의 경우 내가 값 리스트를 넣고, 입력한 bin 개수에 따라 알아서 분류해줌
## ys: y값,
## xs: x 값
## patches 일단, 필요없듬.
ys, xs, patches = plt.hist(x,
bins=5, ## 몇 개의 바구니로 구분할 것인가.
density=True, ## ytick을 퍼센트비율로 표현해줌
cumulative=False, ## 누적으로 표현하고 싶을 때는 True
histtype='bar', ## 타입. or step으로 하면 모양이 바뀜.
orientation='vertical', ## or horizontal
rwidth=0.8, ## 1.0일 경우, 꽉 채움 작아질수록 간격이 생김
color='hotpink', ## bar 색깔
)
## figure에 bar의 개별 퍼센트를 보여주고 싶을 때.
for i in range(0, len(ys)):
## 앞에서 plt.hist 가 리턴하는 값이 bar의 x, y좌표이기 때문에
## 이 값을 이용해서 글자를 어디에 넣을지 결정해줌.
plt.text(x=xs[i]+0.23, y=ys[i]+0.015,
s='{:0>4.1f}%'.format(ys[i]*100), ## 넣을 스트링
fontproperties=BMJUA, ## 문자
fontsize=20,## 크기
## 이유는 모르겠지만, fontsize를 fontproperties보다 먼저 설정하면 값이 안 먹힘
color='red',)
y_min, y_max = plt.ylim() ## 글자가 안 보이는 경우가 있어서, 위의 길이를 조금 늘려줌
plt.ylim(y_min, y_max+0.05)
plt.yticks([])## text로 표시하고 있기 때문에 이 부분은 삭제해줌
## xticks을 변경해줌
plt.xticks([(xs[i]+xs[i+1])/2 for i in range(0, len(xs)-1)],
["{:.1f} ~ {:.1f}".format(xs[i], xs[i+1]) for i in range(0, len(xs)-1)])
plt.savefig('../../assets/images/markdown_img/180802_plt_histogram.svg')
plt.show()
wrap-up
- …뭐 그림으로 다 넣어서 할 거는 없을 것 같아요 하하핫
댓글남기기