データを分析していると、「平均値」や「中央値」だけでは見えてこない違和感に気づくことがあります。
同じ平均を持つデータでも、その中身をよく見ると、値が集中している場合もあれば、大きくばらついている場合もあります。こうした数値の散らばり方を理解することは、データの特徴を正しく捉えるための重要な第一歩です。
ヒストグラムは、数値データの分布を直感的に把握するための、もっとも基本的な可視化手法のひとつです。どのあたりに値が多いのか、極端に大きい(あるいは小さい)値が存在するのか、といった情報を、ひと目で確認することができます。
本記事では、Pythonの可視化ライブラリ Seaborn を使い、ヒストグラムを描く方法を解説します。histplot 関数の基本的な使い方から、見た目を調整するための代表的なオプションまで、実例を交えながら順を追って見ていきます。
「数値のばらつきを感覚的に理解したい」「まずは分布を見るところから分析を始めたい」
そんな方に向けて、ヒストグラムの基本を丁寧に整理していきましょう。
Seabornの基本については、下の記事を参考に。
Seaborn入門:Pythonで始めるデータ可視化 – Lean Data Office
ヒストグラムの基本
tipsのデータセットを使います。
data=でtipsデータセットを使用し、x軸にtotal_billをプロットします。
tips = sns.load_dataset("tips")
sns.histplot(data=tips, x="total_bill")

y軸を指定すると、縦にプロットできます。
sns.histplot(data=tips, y="total_bill")

kde=で、KDEも同時にプロットできます。KDEの詳細は以下を参照ください。
データの分布をなめらかに見る:Seaborn KDEプロット – Lean Data Office
sns.histplot(data=tips, x="total_bill", kde=True)

bins=に引数を渡すと、ビンの数も明示的に調整が可能です。
sns.histplot(data=tips, x="total_bill", bins=30)

また、bins に境界値(ビンの区切り)をリストで指定することができます。
sns.histplot(data=tips, x="total_bill", bins=[10,20,40,50])

また、ビンの幅をX軸の値をベースに指定ができます。
sns.histplot(data=tips, x="total_bill", binwidth=10)

ビンを表示する範囲指定をbinrange=の引数で指定ができます。
sns.histplot(data=tips, x="total_bill", binrange=(20,40))

統計量とヒストグラム
stat=はY軸の計算方法を示します。
sns.histplot(data=tips, x="total_bill", stat='count')
‘count’はデフォルト表示ですので、見え方は変わりません。

Densityはヒストグラム全体の面積が 1 になるように正規化する方法です。
sns.histplot(data=tips, x="total_bill", stat='density')

カウントとヒストグラムの見え方は変わりませんが、Y軸の表示が変更になっているかと思います。
probabilityもヒストグラムの形状は変わりませんが、全体に対する割合を示します。
sns.histplot(data=tips, x="total_bill", stat='probability')

最後に累計(=cumulative)を説明します。わかりやすいように一部スタイルを設定していますが、ここではいったん気にせず表示方法の違いが把握できればOKです。
sns.histplot(data=tips, x="total_bill", stat='probability', fill=False, element='step', cumulative=True)

類型表示によってどこまでで何パーセントかを一目で伝えることができます。

カテゴリ変数の扱い
hue=でカテゴリを表示させます。
sns.histplot(data=tips, x="total_bill", hue='time')

複数のカテゴリを色分けでヒストグラムで表示させることができました。
以下のコードでは、
sns.histplot(data=tips, x="total_bill", hue='time', element='step')

ステップ表示にてヒストグラムのアウトラインを表示させることができます。
またpolyによって、
sns.histplot(data=tips, x="total_bill", hue='time', element='poly')

棒ではなく輪郭線(ポリゴン)でヒストグラムを描画し重なっても両方の形が見えるように表示させることもできます。
下のコードでは、multiple=stackによって、
sns.histplot(data=tips, x="total_bill", hue='time', multiple='stack')

全体量とカテゴリ別の構成比を見える化できます。
また、multiple=’fill’によって、全体の割合(構成比)だけに注目したヒストグラムも描画できます。
sns.histplot(data=tips, x="total_bill", hue='time', multiple='fill')

二変量ヒストグラム
Seabornでは、二変量のヒストグラムを描画することも可能です。
まず、以下のサンプルデータセットを使用します。
penguins = sns.load_dataset("penguins")
y軸の指定を行い、histplot関数を呼びます。
sns.histplot(data=penguins, x='bill_length_mm', y='bill_depth_mm')

二変量がヒートマップのように表示されました。
しかし、y軸に変数を割り当てたことで、スケールがビンの大きさではなく色だけでしか判別できなくなりました。
cbar=Trueでカラーバーを追加するとよりヒートマップがわかりやすくなります。
sns.histplot(data=penguins, x='bill_length_mm', y='bill_depth_mm', cbar=True)

hue=によってカテゴリ表示も可能です
sns.histplot(data=penguins, x='bill_length_mm', y='bill_depth_mm', hue='species')

このヒートマップではそれぞれのペンギンの種のくちばしのサイズの傾向はわかりますが、二変量でカテゴリを追加すると、オーバーラップした部分が各カテゴリごとにどれくらいのスケールなのかを判別するのが難しくなります。
スケールを把握するために種別にヒートマップを活用したい場合に、y軸にhue=の値と同じくspeciesを割り当てると、色の濃淡でスケールを判別できます。
※このケースではくちばしの厚み(bill_depth_mm)を外していますので厳密には二変量とは言わないかもしれませんが参考まで。
sns.histplot(data=penguins, x=’bill_length_mm’, y=’species’, hue=’species’)

スタイルの調整
最後に使い勝手の良いスタイルを紹介します。
multiple=’dodge’で複数カテゴリを並列表示できます。
sns.histplot(data=penguins, x='species', hue='sex', multiple='dodge')

今は3つの種が隣り合わせになっていてギャップがないので、shrink=でより見やすく変更できます。
sns.histplot(data=penguins, x='species', hue='sex', multiple='dodge', shrink=0.8)

color=で色を明示的に変更することも可能です。
デフォルトでは、
sns.histplot(data=penguins, x='bill_length_mm')

color=で明示的に色を変更します。
sns.histplot(data=penguins, x='bill_length_mm',color='indigo')

fill=を指定し、塗りつぶしをなくすことも可能です。
sns.histplot(data=penguins, x='bill_length_mm',color='indigo', fill=False)

複数カテゴリを表示させているケースでは、
sns.histplot(data=penguins, x='species', hue='sex', multiple='dodge', shrink=0.8)

pallet=でカラーテーマを変更できます。

まとめ
本記事では、Seaborn の histplot を用いて、数値データのばらつきを可視化する基本的な考え方と使い方を整理しました。
ヒストグラムは、平均値や単一の代表値だけでは見えない分布の形・広がり・偏りを直感的に把握できる点が大きな強みです。
histplot では、ビン数の指定や正規化方法に加え、hue によるカテゴリ分割、multiple や element を使った表示方法の切り替えなど、目的に応じた柔軟な可視化が可能です。これにより、「データがどこに集中しているのか」「カテゴリ間で分布に違いがあるのか」といった問いに対して、視覚的に答えを示すことができます。
数値データを扱う際は、集計結果だけで判断するのではなく、まずヒストグラムで分布を確認することで、データの性質や違和感に気づきやすくなります。
ぜひ histplot を活用し、分析やレポートの初期段階でデータの全体像をつかむ習慣を取り入れてみてください。