2017-04-06 6 views
1

相関係数を計算してペアプロット(以下に示す)に追加する関数が見つかりました。私の問題は、色合い(カテゴリ変数)を持つペアプロットを実行すると、2つのグループの相関係数が互いに上に表示されることです。色相(カテゴリ変数)とのペアグリッドプロットに2つの相関係数を表示する - 海底のpython

this is how the plot looks like

これは私のグラフコード(互いの上に「海氷方向」の関数として、気候変動の姿勢とピークとの間の相関係数を示している)である:ここ

`g = sns.PairGrid(df, vars = ['OverallClimateChangeAttitude', 'Peak'], 
hue="IV_SeaIceChangeDirection") 
g.map_upper(plt.scatter, s=10) 
g.map_diag(sns.distplot, kde=False) 
g.map_lower(sns.kdeplot, cmap="Blues_d") 
g.map_lower(corrfunc)` 

相関関数です:

`def corrfunc(x, y, **kws): 
r, _ = stats.pearsonr(x, y) 
ax = plt.gca() 
ax.annotate("r = {:.2f}".format(r), 
      xy=(.1, .9), xycoords=ax.transAxes)` 

何か助けを非常に感謝!

答えて

0

問題は、相関関数がアノテーションを配置する場所を正確に指定し、この場所が両方の色相で同じ(.1, .9)であることです。あなたは何らかの形でデータの異なるカテゴリに異なる場所を選択する必要があります。私はこれを行うには、2つの方法を考えた:

  • いずれかの残りの部分
  • 下に新しいものを配置するか、手動で各hue値の位置を事前に定義して選択するkws['label']を使用するように軸に既に存在するどのように多くの注釈を数えますどちらを取るか。

両方のオプションについては、corrfuncコードを参照してください。残りのコードとサンプルのデータセットを使ってプロットを作成しました。注釈にラベルテキストを追加したのは、そうでなければどの相関係数がどれであるかわからないからです。

from scipy import stats 
import seaborn as sns 
import matplotlib 

def corrfunc(x, y, **kws): 
    r, _ = stats.pearsonr(x, y) 
    ax = plt.gca() 
    # count how many annotations are already present 
    n = len([c for c in ax.get_children() if 
        isinstance(c, matplotlib.text.Annotation)]) 
    pos = (.1, .9 - .1*n) 
    # or make positions for every label by hand 
    pos = (.1, .9) if kws['label'] == 'Yes' else (.1,.8) 

    ax.annotate("{}: r = {:.2f}".format(kws['label'],r), 
       xy=pos, xycoords=ax.transAxes) 

tips = sns.load_dataset("tips") 
g = sns.PairGrid(data = tips, vars = ['tip', 'total_bill'], hue="smoker", size=4) 
g.map_upper(plt.scatter, s=10) 
g.map_diag(sns.distplot, kde=False) 
g.map_lower(sns.kdeplot, cmap="Blues_d") 
g.map_lower(corrfunc) 
g.add_legend() 

結果:

seaborn pairplot with annotations

+0

これは素晴らしいですが、あなたが@Gereleth感謝!! – MarieJ

+0

両方のソリューションが完璧に機能します!私はより自動でよりエレガントであるため、第1の解決方法を選んだのです!私は今、対数プロットで相関係数に合うように関数を適合させようとしていますが、成功することはありません... 'g = sns.pairplot(df、x_vars = [" Probability "、" Vagueness "]、y_vars = [" Climateあなたは変数がXで分割されているので、それはそうだと思います。とY変数? – MarieJ

+0

正確に何が間違っていたのかを知ることなく助けができません。しかし、map_lowerの影響を受けるサブプロットが2つしかない場合、どのサブプロットに影響を与えるべきかについて混乱が生じるかもしれないと思います。他のマッピングを試してみることをお勧めします。 – gereleth

関連する問題