如何在顶部添加条形值(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)?的主要内容,如果未能解决你的问题,请参考以下文章