【超簡単】Seabornで綺麗なヒストグラム付き散布図を描画する方法

Python製の描画ライブラリ Seabornでヒストグラムを描画する方法を紹介します。Seabornではヒストグラムを付けて散布図を生成することができるので、matplotlibよりも少しリッチな可視化をすることができます。特に、最頻値や分布の状況を簡単に把握することができるので、便利です。

Seabornって何?まだインストールしてない、よく分かっていないという方はこちらの記事を読んでからの方が理解が進みます。

グラフを綺麗に描画するPythonの可視化ライブラリ Seaborn の基本とインストール方法 【超初心者向け入門】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
プロットに用いる各種オプションをディクショナリで指定
matplotlibで指定可能な色の名前と一覧をまとめてみた

様々なヒストグラム付き散布図を描画してみる

一覧表にある引数を指定して、いくつか試しにグラフを作成してみましょう。

背景を白、ヒストグラムとの距離を縮める

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でヒストグラム付きの散布図の生成を見てきました。単純に色々と指定できるので非常に便利です。今回扱わなかった引数についても簡単に実装できるので、ぜひ試してみてください!