2016-08-25 2 views
3

Я хотел бы визуализировать 2 булевых информации, хранящихся в виде столбцов в одном морском FactorPlot.Annotate seaborn Factorplot

Вот мой ДФ:

enter image description here

Я хотел бы представить себе оба actual_group и adviced_group в том же FactorPlot.

Сейчас я только в состоянии построить adviced_groups используя hue параметр:

enter image description here

на код ниже:

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

Я пытался использовать ax.annotate() из Matplotlib без каких-либо успех, потому что - для чего я понял - Оси не обрабатываются методом sns.FactorPlot().

Это может быть аннотация, раскрасить один из краев прямоугольника или что-нибудь, что может помочь визуализировать фактическую группу.

В результате может быть, например, что-то вроде этого:

enter image description here

+1

Не могли бы вы прикрепить фрагмент из 'dataframe'? –

+0

@NickilMaveli только что сделал! –

+0

Вы можете использовать атрибут 'ax' для объекта, возвращаемого' factorplot'. – mwaskom

ответ

5

Вы можете сделать использование 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 

операции над данными:

Выбор подмножества df где значения actual_group истинны. Значение 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] 

Plotting:

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