<Python, seaborn, numpy> FacetGrid と distplot で2軸表記する。

seaborn.FacetGridseaborn.distplot()で、縦軸y-axisを2軸にして、

  • かつ、
    • 片方は度数
    • 片方は正規分布曲線の確立密度

にする。

g.map()でちゃっと、できなかったので、
g.axesの1要素づつのインデックスをnp.nditer()でチクタク取り出して、
ax.twinx()で第2軸のオブジェクトを作って、
g.facet_data()でaxごとにぐりぐり回して作図。

In [1]: import seaborn as sns

In [2]: import numpy as np

In [3]: import matplotlib.pyplot as plt

In [4]: tips = sns.load_dataset('tips')

In [11]: tips.columns
Out[11]: Index(['total_bill', 'tip', 'sex', 'smoker', 'day', 'time', 'size'], dtype='object')

In [17]: g = sns.FacetGrid(tips, row='smoker', col='time')
    ...: ax1 = g.axes
    ...: ax2 = np.empty_like(g.axes)
    ...: 
    ...: it = np.nditer(ax1, flags=['multi_index', 'refs_ok'])
    ...: while not it.finished:
    ...:     i = it.multi_index[0]
    ...:     j = it.multi_index[1]
    ...:     ax2[i][j] = ax1[i][j].twinx()
    ...:     ax2[i][j].get_shared_y_axes().join(ax2[0][0], ax2[i][j])
    ...:     it.iternext()
    ...:     
    ...: for data in g.facet_data():
    ...:     i = data[0][0]
    ...:     j = data[0][1]
    ...:     sns.distplot(data[1]['total_bill'], hist_kws={'normed':True}, hist=False, ax=ax1[i][j])
    ...:     sns.distplot(data[1]['total_bill'], hist_kws={'normed':False}, kde=False, ax=ax2[i][j])
    ...:     

f:id:nekoyukimmm:20160112103717p:plain

Seabronのマニュアル。

seaborn.FacetGrid — seaborn 0.6.0 documentation

seaborn.distplot — seaborn 0.6.0 documentation

参考。数学の勉強。

haku1569.seesaa.net