如何在顶部添加条形值(catplot seaborn)?

Posted

技术标签:

【中文标题】如何在顶部添加条形值(catplot seaborn)?【英文标题】:how to add bar value on the top (catplot seaborn )? 【发布时间】:2019-04-01 10:43:08 【问题描述】:

数据格式如下:

first_name nick_name              activity                         duration            
  Harish   Escorts   MC GUARD ASSEMBLY WITH CABINATE BRACKET          226   
  Harish   Escorts   COOLANT TANK AND SIDE DOORS, OPP DOORS           225   
Narasaraj  Escorts   MC GUARD ASSEMBLY WITH CABINATE AND BRACKET MO   225   
Narasaraj  Escorts   COOLANT TANK AND SIDE DOORS, OPP DOORS ASSEMBLY  150
PurushothamEscorts   PNEUMATIC AND LUBRICATION ASSEMBLY                55
Shivu      Escorts   CABLE CARRIER AND AXIS MOTOR ASSEMBLY            123

使用 seaborn 我正在做一个条形图:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="ticks", color_codes=True)


df = pd.read_excel('VMC & HMC data (sep&oct-15).xlsx',  index = False)

df1 = df1[[ "first_name" , "nick_name", "activity" , "duration"]]

g = sns.catplot(x= 'first_name', y = 'duration', hue = 'activity' , data = df1, kind = 'bar', dodge=False, palette="deep", ci = None)

plt.ylim(0,300)
plt.gcf().autofmt_xdate()

for index, row in df1.iterrows():
    g.text(row.name,row.first_name,row.duration, color='black', ha="center")

它给我带来了错误:

AttributeError: 'FacetGrid' object has no attribute 'text'

如何在栏的顶部添加栏的值?

【问题讨论】:

@jezrael 请看看我的问题 :) 【参考方案1】:

catplot 返回一个 FacetGrid。这没有text 方法。

两种选择:

A.从网格中选择一个轴

如果catplot 产生多个轴

g = sns.catplot(...)
g.axes[0].text(...)

如果catplot 产生单轴

g = sns.catplot(...)
g.axes.text(...)

B.使用条形图

ax = sns.barplot(...)
ax.text(...)

【讨论】:

g.axes[0].text(...) 会在enumerate 循环下被调用吗?? 我试过for index, row in df1.iterrows(): g.axes[0].text(row.name,row.first_name, round(row.duration,2), color='black', ha="center"),但这给出了一个错误TypeError: 'AxesSubplot' object does not support indexing 我尝试了选项 A 并得到了一个 AttributeError: 'numpy.ndarray' 对象没有属性 'text'。我已经发布了对我有用的解决方案【参考方案2】:

我尝试了选项 A 并得到一个 AttributeError: 'numpy.ndarray' object has no attribute 'text'。

我是这样解决的: 您可以通过修改返回的 Facet 网格为每个条形添加值。

g = sns.catplot(x='class', y='survival rate', 
            hue='sex', data=df, kind='bar')

ax = g.facet_axis(0,0)
for p in ax.patches:
    ax.text(p.get_x() + 0.015, 
            p.get_height() * 1.02, 
            '0:.2f'.format(p.get_height()), 
            color='black', rotation='horizontal', size='large')

这是示例数据的样子,如果你想重新创建我的情节 -

       class    sex   survival rate
   0    first   men    0.914680
   1    second  men    0.300120
   2    third   men    0.118990
   3    first   women  0.667971
   4    second  women   0.329380
   5    third   women   0.189747
   6    first   children    0.660562
   7    second  children    0.882608
   8    third   children    0.121259

【讨论】:

以上是关于如何在顶部添加条形值(catplot seaborn)?的主要内容,如果未能解决你的问题,请参考以下文章

Seaborn catplot(kind ='count')将条形图更改为饼形图

剑道条形图 - 顶部的系列标签?

如何在条形图的每个条形顶部添加一个额外的数字

如何在seaborn的条形顶部添加百分比

如何在seaborn的条形顶部添加百分比

python - 如何在条形图顶部显示值[重复]