web-dev-qa-db-ja.com

水平プロットでseabornペアプロットを使用して、1つの独立変数と多くの従属変数を比較します

Seabornの pairplot 関数を使用すると、データセットにペアワイズ関係をプロットできます。

ドキュメントによると(ハイライトが追加されました):

デフォルトでは、この関数は軸のグリッドを作成し、データ内の各変数が単一の行のy軸と単一の列のx軸で共有されるようにします。対角軸は異なる方法で処理され、その列の変数のデータの単変量分布を示すプロットを描画します。

変数のサブセットを表示したり、行と列に異なる変数をプロットしたりすることもできます。

行と列に異なる変数をサブセット化する例は1つしか見つかりませんでした ここ (これはPairGridとpairplot() セクション)。ご覧のとおり、同じ単一の従属変数(y_vars)に対して多くの独立変数(x_vars)をプロットしており、結果は次のようになります。かなりいい。

私は、多くの従属変数に対して単一の独立変数をプロットするのと同じことをしようとしています。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

ages = np.random.gamma(6,3, size=50)
data = pd.DataFrame({"age": ages,
                     "weight": 80*ages**2/(ages**2+10**2)*np.random.normal(1,0.2,size=ages.shape),
                     "height": 1.80*ages**5/(ages**5+12**5)*np.random.normal(1,0.2,size=ages.shape),
                     "happiness": (1-ages*0.01*np.random.normal(1,0.3,size=ages.shape))})

pp = sns.pairplot(data=data,
                  x_vars=['age'],
                  y_vars=['weight', 'height', 'happiness'])

問題は、サブプロットが垂直に配置され、それを変更する方法が見つからなかったことです。

enter image description here

その場合、タイリング構造は、[〜#〜] y [〜#〜]軸がすべてのサブプロットでラベル付けされるほどきれいではないことを知っています。また、次のような手作業でプロットを作成できることもわかっています。

fig, axes = plt.subplots(ncols=3)
for i, yvar in enumerate(['weight', 'height', 'happiness']):
    axes[i].scatter(data['age'],data[yvar])

それでも、シーボーンの使い方を学んでいて、インターフェースがとても便利だと思うので、方法はないかと思います。また、この例は非常に簡単ですが、より複雑なデータセットの場合、seabornは、raw-matplotlibアプローチを非常に迅速に(hue、開始する)

13
mgab

x_varsパラメーターとy_varsパラメーターに渡された変数名を交換するによって、探しているように見えるものを実現できます。したがって、コードのsns.pairplot部分を再検討します。

pp = sns.pairplot(data=data,
                  y_vars=['age'],
                  x_vars=['weight', 'height', 'happiness'])

ここで行ったのは、x_varsをy_varsに交換することだけであることに注意してください。これで、プロットが水平に表示されます。

enter image description here

これで、x軸は各プロットに一意になり、共通のy軸はage列によって決定されます。

24
MarieJ