2017-09-22 4 views
0

私はFacetgrid countplotで吹き抜けグラフをプロットしています。しかし、私は色相バーを横並びにすることはできません。Facegrid Countplotの色相バーを並べる方法は?

enter image description here

g = sns.FacetGrid(titanic_df, row='Pclass', hue='Survived', size=2, aspect=2.5, sharex=False, sharey=False) 
g.map(sns.countplot, 'Tclass', alpha=.6) 
g.fig.suptitle('Distribution of Survival by Ticket Prefix and Ticket Class', fontsize=9.5, y=1.01) 
g.set_xlabels('Ticket Prefix') 
g.fig.text(0, .5, 'Ticket Prefix', va='center', rotation='vertical', fontsize=9.5) 
g.add_legend() 

ので、私はそれがそのPCLASSに存在しないチケットプレフィックス(TCLASS)をフィルタリングdidntのように、それが失敗し、Factorplotを使用してみました。

enter image description here

g = sns.factorplot(x='Tclass', data=titanic_df, row='Pclass', hue='Survived', kind='count', size=2, aspect=2.5, sharex=False, sharey=False) 

私は何をすべき? :(

答えて

0

私はFacetgridにそれを作ることが出来なかったが、私はmatplotlibののサブプロットを使用して手動で。それはスマートではありませんでしたということが、少なくとも私は、私が欲しいものだ。

私とのよりスマートな方法を共有してください。同じ効果をachiving!ありがとう!

enter image description here

fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=[10,6]) 
g1 = sns.countplot(x='Tclass', hue='Survived', data=titanic_df[titanic_df.Pclass == 1], ax=ax1) 
g2 = sns.countplot(x='Tclass', hue='Survived', data=titanic_df[titanic_df.Pclass == 2], ax=ax2) 
g3 = sns.countplot(x='Tclass', hue='Survived', data=titanic_df[titanic_df.Pclass == 3], ax=ax3) 

g1.set_title('Pclass = 1', fontsize=9.5, y=.85) 
g2.set_title('Pclass = 2', fontsize=9.5, y=.85) 
g3.set_title('Pclass = 3', fontsize=9.5, y=.85) 
g1.set_xlabel(''); g2.set_xlabel(''); g3.set_xlabel('Ticket Prefix') 
g1.set_ylabel(''); g2.set_ylabel('Frequency'); g3.set_ylabel('') 
g1.legend(''); g3.legend('') 
leg = g2.legend(fontsize='small', loc='center left', bbox_to_anchor=(1, 0.5)) 
leg.set_title('Ticket Prefix', prop={'size':'small'}) 
fig.suptitle('Distribution of Survival by Ticket Prefix and Ticket Class', fontsize=9.5, y=.94) 
1

factorplot確かにそのすべてのサブプロットにおけるすべての可能なx値を使用します。Facetgridのしたがって使用がかもしれREQあなた。問題は、Facetgridhueが、個々のカテゴリをプロット上に個別にプロットするため、バーがオーバーラップすることです。あなたがしたいのは、countplothueを使用してグループ化されたバーを取得することです。問題は、hue引数がマップ関数によって正しく認識されないことです。だから、あなた自身の関数を書くことができます。これは引数としてhueをとります。

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

def f(c=1, N=30): 
    return pd.DataFrame({"class" : np.ones(N)*c, 
         "survived" : np.random.randint(0,2,size=N), 
         "ticket" : np.random.choice(list("ABCDE")[:c+2], size=N) }) 
df = f() 
df = df.append(f(2)) 
df = df.append(f(3))  


def countplot(x, hue, **kwargs): 
    data=kwargs.pop("data") 
    order=np.unique(data["ticket"].values) 
    sns.countplot(x, hue=hue, data=data,order=order,**kwargs) 

g = sns.FacetGrid(df, row='class', size=2, aspect=2.5, sharex=False, sharey=False) 
g.map_dataframe(countplot, 'ticket',hue='survived', alpha=.6, 
       palette=sns.color_palette(),) 

g.fig.suptitle('Distribution of Survival') 
g.fig.subplots_adjust(top=0.9, left=0.1) 
g.set_xlabels('Ticket Prefix') 
g.add_legend() 

plt.show() 

enter image description here

関連する問題