注释seaborn Factorplot

gow*_*oww 3 python matplotlib pandas seaborn

我想在一个seaborn FactorPlot中可视化存储为列的2个布尔信息.

这是我的df:

在此输入图像描述

我想的都可视化actual_group,并adviced_group在同一FactorPlot.

现在我只能adviced_groups使用hue参数绘图:

在此输入图像描述

使用以下代码:

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

我尝试使用ax.annotate()from matplotlib但没有任何成功,因为 - 据我所知 - Axes不是由sns.FactorPlot()方法处理的.

它可以是一个注释,为矩形的一个边缘着色或任何可以帮助可视化实际组的东西.

结果可能是这样的事情:

在此输入图像描述

Nic*_*eli 6

您可以使用plt.annotate提供的方法为如下所示的matplotlib注释factorplot:

建立:

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
Run Code Online (Sandbox Code Playgroud)

数据操作:

选择df值为actual_groupTrue 的子集.该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]
Run Code Online (Sandbox Code Playgroud)

绘图:

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

将一些填充添加到注释的位置以及文本的位置以考虑要绘制的条的宽度.

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()
Run Code Online (Sandbox Code Playgroud)

图片