2016-08-25 12 views
3

海底のFactorPlotに列として格納された2つのブール情報を視覚化したいと思います。私は同じFactorPlotにactual_groupadviced_groupの両方を視覚化したいseaborn Factorplotの注釈

enter image description here

は、ここに私のDFです。どのなし

_ = sns.factorplot(x='groups', 
        y='nb_opportunities', 
        hue='adviced_groups', 
        size=6, 
        kind='bar', 
        data=df) 

私はmatplotlibのからax.annotate()を使用しようとしました:以下のコードで

enter image description here

は、今の私はhueパラメータを使用してadviced_groupsをプロットすることができるだけですなぜなら、私が理解したところでは、軸はsns.FactorPlot()メソッドで処理されないからです。

実際のグループを視覚化するのに役立つ、注釈、矩形のエッジまたはいずれかの色を付けることができます。

結果は、例えば次のようなものかもしれない

セットアップ:あなたが示すようにfactorplotのための注釈を作るためにmatplotlibによって提供さplt.annotate方法を利用することができ

enter image description here

+1

あなたは 'dataframe'の抜粋を添付してもらえますか? –

+0

@NickilMaveliがやった! –

+0

'factor'関数が返すオブジェクトに対して' ax'属性を使うことができます。 – mwaskom

答えて

5

df = pd.DataFrame({'groups':['A', 'B', 'C', 'D'], 
        'nb_opportunities':[674, 140, 114, 99], 
        'actual_group':[False, False, True, False], 
        'adviced_group':[False, True, True, True]}) 
print (df) 

    actual_group adviced_group groups nb_opportunities 
0  False   False  A    674 
1  False   True  B    140 
2   True   True  C    114 
3  False   True  D    99 

データ操作:

actual_groupの値がTrueのdfのサブセットを選択します。 indexの値とnb_opportunitiesの値は、アノテーションの場所になるxとyの引数になります。

actual_group = df.loc[df['actual_group']==True] 
x = actual_group.index.tolist()[0] 
y = actual_group['nb_opportunities'].values[0] 

プロット:

sns.factorplot(x="groups", y="nb_opportunities", hue="adviced_group", kind='bar', data=df, 
       size=4, aspect=2) 

がプロットされているバーの幅を考慮するために、注釈の位置ならびにテキストの場所にいくつかのパディングを追加します。

plt.annotate('actual group', xy=(x+0.2,y), xytext=(x+0.3, 300), 
      arrowprops=dict(facecolor='black', shrink=0.05, headwidth=20, width=7)) 
plt.show() 

Image