ふくふくHukuhuku Inc.
EP.05Viz 10分公開: 2026-05-10

分布を伝える5種:ヒストグラム・箱ひげ・バイオリン・密度・QQプロット

「データのばらつき」を見せるグラフ群。ヒストグラムのビン幅問題、箱ひげの「箱」と「ひげ」が示すもの、バイオリンチャートの優位性、外れ値検出の標準パターン。

#可視化#分布#統計#outlier
CO📔 Google Colab で開く(上から順にセルを実行)
シェア

「平均値だけ見せる」のは可視化の罪と言われます。同じ平均でも分布が全く違うことがある(アンスコムの例)。今回は分布を伝える5つの定番グラフを整理します。

対応マトリクス
グラフmatplotlibLooker StudioExcel
ヒストグラム
箱ひげ図✅(2016〜)
バイオリン⚠️
密度プロット(KDE)⚠️
QQプロット⚠️

1. ヒストグラム

用途:1次元データの分布を bin(区間)に分けて棒で表示。テストの点数分布、給与分布、サーバーの応答時間分布。 強み:分布の形(左右非対称・多峰性・偏り)が一目。 弱み:bin 幅で印象が大きく変わる。スタージェスの公式(k = 1 + log₂(n))など適切な bin 幅選びが大事。

3つの正規分布(A単峰・B単峰・C二峰)のヒストグラム
ヒストグラム:分布の形が一目。Cの「二つ山(多峰)」もちゃんと見える

2. 箱ひげ図(boxplot)

用途:複数グループの分布を同時比較。給料の業界別比較、A/Bテスト結果、 使用率の時間帯別。 =Q1〜Q3(中央50%)、中央線=中央値、ひげ=1.5×IQR(四分位範囲)の範囲、強み:外れ値が一目、複数群比較が楽。 弱み:分布の「形」(多峰性など)は分からない。

3群(A/B/C)の箱ひげ図。中央値・四分位・外れ値が見える
箱ひげ:箱の中=中央50%、ひげ=1.5×IQR、点=外れ値
箱の中身、暗記必須

Q1(25%点)から Q3(75%点)の真ん中50%が「箱」。これが分かるとデータサイエンスの会議で「箱が広い」「箱が右に寄ってる」が即座に読めます。

3. バイオリンチャート

用途:箱ひげ + 密度プロットのハイブリッド。形が太い場所=データが集中強み:分布の形と要約統計を同時。多峰性も見える。 弱み:認知度が低い、Excel・ で作れない。

3群のバイオリンチャート。Cが二峰性で「8の字」型
バイオリン:箱ひげ + 密度。多峰性も「形」で見える

4. 密度プロット(KDE)

用途:ヒストグラムの bin 幅問題を回避するスムーズな分布表現。 強み:滑らかで美しい、複数分布の重ね合わせが楽。 弱み:bin の代わりに bandwidth で印象が変わる。

3群の密度推定プロット(KDE)
KDE:ヒストグラムを滑らかにした表現。重ね合わせ比較が美しい

5. QQプロット(Quantile-Quantile)

用途:「データが正規分布に従うか」を可視的に検定。点が直線上に並べば正規分布。 強み:統計検定の前段階で必須。回帰分析の残差チェック。 弱み:読むのにやや慣れが必要、ビジネス現場での認知度は低い。

QQプロット2枚:A(正規分布、直線に乗る)とC(二峰、ズレる)
QQプロット:直線に乗れば正規分布、外れる程度で「ズレ方」が分かる
seaborn で4種類を一気に
Python
# pip install seabornimport seaborn as snsimport numpy as npimport matplotlib.pyplot as plt
np.random.seed(0)data = {    "A": np.random.normal(50, 10, 200),    "B": np.random.normal(60, 15, 200),    "C": np.concatenate([np.random.normal(40, 5, 100), np.random.normal(70, 5, 100)]),}import pandas as pddf = pd.DataFrame({k: v for k, v in data.items()}).melt(var_name="group", value_name="value")
fig, axes = plt.subplots(2, 2, figsize=(12, 8))sns.histplot(data=df, x="value", hue="group", ax=axes[0,0]); axes[0,0].set_title("Histogram")sns.boxplot(data=df, x="group", y="value", ax=axes[0,1]); axes[0,1].set_title("Boxplot")sns.violinplot(data=df, x="group", y="value", ax=axes[1,0]); axes[1,0].set_title("Violin")sns.kdeplot(data=df, x="value", hue="group", ax=axes[1,1]); axes[1,1].set_title("KDE")plt.tight_layout(); plt.show()

次回予告

EP.06 は地理系:コロプレス・バブルマップ・ヒートマップ・フローマップ。日本地図・世界地図にデータを乗せる定番手法と、商圏分析・配送最適化での実戦例。

シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp