여러 히스토그램을 겹쳐서 표시할 때 bin 폭을 통일하는 방법(matplotlib)

배경



for 루프를 사용하여 여러 히스토그램을 겹쳐서 표시하는 경우 bin 폭을 지정하지 않으면 데이터마다 폭이 다르게 비교하기 어려웠기 때문에 bin 폭을 통일하여 표시하는 방법을 조사했습니다.
※ 자신의 메모이므로 읽기가 어려우면 죄송합니다

import · 사용한 데이터 세트


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_wine

wine = load_wine()
df_wine = pd.DataFrame(data=wine.data, columns=wine.feature_names)
df_wine['target'] = wine.target

scikit-learn의 와인 데이터 세트를 사용합니다.
target이라는 열에는 와인의 종류를 나타내는 라벨을 넣었습니다.

방법


plt.hist() 의 인수의 bins 에 리스트를 건네주면(자), 리스트로 지정된 값을 구간의 단락으로 한 히스토그램이 묘출된다.
( bins=[0,1,2,3,4] 그러면 0~1, 1~2, 2~3, 3~4의 4개의 구간의 막대가 그려진다)

이것을 이용해, np.linspace(最小値, 最大値, 区切りたい数) 로 리스트를 작성해, 각 라벨용의 plt.hist() 의 인수로서 건네주는 것으로, 공통의 bin 를 지정한다.

↓bin 폭 조정 없음
feature_name = 'hue'
target_names = df_wine['target'].unique()

for target in target_names:
    plt.hist(df_wine[df_wine.target == target][feature_name], alpha=0.6, label=target)

plt.title(feature_name)
plt.legend()



↓bin 폭 조정 있음
feature_name = 'hue'
target_names = df_wine['target'].unique()

# 最大値と最小値の間をn_bin等分した幅でヒストグラムの棒を表示するように設定(各targetのbin幅を統一する)
n_bin = 15
x_max = df_wine[feature_name].max()
x_min = df_wine[feature_name].min()
bins = np.linspace(x_min, x_max, n_bin)

for target in target_names:
    plt.hist(df_wine[df_wine.target == target][feature_name], bins=bins, alpha=0.6, label=target)

plt.title(feature_name)
plt.legend()



참고한 기사



matplotlib과 seaborn의 히스토그램으로 빈 너비를 깔끔하고 깔끔하게 정렬 - Qiita

좋은 웹페이지 즐겨찾기