Python製の描画ライブラリ Seabornでヒストグラムを描画する方法を紹介します。Seabornではヒストグラムを付けて散布図を生成することができるので、matplotlibよりも少しリッチな可視化をすることができます。特に、最頻値や分布の状況を簡単に把握することができるので、便利です。
Seabornって何?まだインストールしてない、よく分かっていないという方はこちらの記事を読んでからの方が理解が進みます。


もくじ
ヒストグラム付きの散布図を描画してみる
seaborn.jointplotメソッドを使って、散布図を描画し、その外側にヒストグラムを出力します。こちらでは、irisデータセットをSeaborn経由で読み込んで、横軸にsepal_width、縦軸にpetal_lengthを置いて描画してみます。
Python
import seaborn as sns
# irisデータセットを読み込む
iris = sns.load_dataset('iris')
sns.jointplot(x='sepal_width', y='petal_length', data=iris)
注意
URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)>というエラーメッセージが出る場合があります。これはSSL証明書が正しくないサイトにPythonでアクセスすると出るエラーです。以下のコードを打ち込むと、SSL証明書が正しくないサイトにもアクセスできます。セキュリティ上は安全と保証されないことを認識の上でご利用ください。 Python
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
主な引数をまとめてみる
引数でさまざまなデザインに変更することができます。Seabornはmatplotlibに比べて多彩なデザイン修正が可能です。
x, y | データをベクトルで指定、または、データセットの列名を文字列で指定 |
data | 描画に用いるデータフレーム。出力対象の列名は上記 x と y で指定 |
kind | プロットの種類。以下から指定する。 scatter: 散布図 reg: 散布図と回帰直線 resid: y軸に回帰直線からの残差 (誤差) を出力する kde: カーネル密度推定を用いた等高線風の図 hex: 六角形のヒートマップ |
stat_func | 散布図の右上に表示する統計量を計算する関数。入力パラメータは、(x, y) の 2値。出力は(統計量, p値)で構成される必要がある。 |
color | 各要素をプロットする際に用いるmatplotlibの色名を指定 色名表の詳細はこちらでまとめてます! |
size | 図のサイズを数値で指定 |
space | 散布図と散布図の外側に出力するヒストグラムの間の空きスペースの大きさを数値で指定 |
dropna | Trueに設定すると、欠損値を取り除く |
xlim, ylim | x軸、y軸の下限、上限をタプル(下限, 条件)で指定 |
joint_kws marginal_kws annot_kws |
プロットに用いる各種オプションをディクショナリで指定 |

様々なヒストグラム付き散布図を描画してみる
一覧表にある引数を指定して、いくつか試しにグラフを作成してみましょう。
背景を白、ヒストグラムとの距離を縮める
Python
sns.set(style="white")
sns.jointplot(x='sepal_width', y='petal_length', data=iris, space=0)
散布図のプロットを六角形のヒートマップ形式に変更する
kind=’hex’を指定すると、ヒートマップ形式になります。少しモダンでおしゃれな雰囲気に変わりますね。グラデーションで分布を示したい時などに使えます。
Python
# kindにhexを指定する
sns.set(style="white")
sns.jointplot(x='sepal_width', y='petal_length', data=iris, space=0, kind='hex')
カーネル密度推定を用いた等高線風形式に変更する
kind=’kde’と指定するだけで等高線風のグラフを生成できます。
Python
# kindにkdeを指定する
sns.set(style="white")
sns.jointplot(x='sepal_width', y='petal_length', data=iris, space=0, kind='kde')
色を変更する
colorで色を指定することができます。今回はオレンジ色に変えてみました。
Python
sns.set(style="white")
sns.jointplot(x='sepal_width', y='petal_length', data=iris, space=0, color='orange')
まとめ
Seabornでヒストグラム付きの散布図の生成を見てきました。単純に色々と指定できるので非常に便利です。今回扱わなかった引数についても簡単に実装できるので、ぜひ試してみてください!