你可以使用以下函数来显示Seaborn Barplot柱状图上的数值:
def show_values(axs, orient="v", space=.01):
def _single(ax):
if orient == "v":
for p in ax.patches:
_x = p.get_x() + p.get_width() / 2
_y = p.get_y() + p.get_height() + (p.get_height()*0.01)
value = '{:.1f}'.format(p.get_height())
ax.text(_x, _y, value, ha="center")
elif orient == "h":
for p in ax.patches:
_x = p.get_x() + p.get_width() + float(space)
_y = p.get_y() + p.get_height() - (p.get_height()*0.5)
value = '{:.1f}'.format(p.get_width())
ax.text(_x, _y, value, ha="left")
if isinstance(axs, np.ndarray):
for idx, ax in np.ndenumerate(axs):
_single(ax)
else:
_single(axs)
这个函数对水平和垂直柱状图都有效。
下面的例子显示了如何在内置的seaborn "tips "数据集中实际使用这个函数:
import seaborn as sns
import pandas as pd
import numpy as np
#load tips dataset
data = sns.load_dataset("tips")
#view first five rows
data.head()
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
例1:在垂直条形图上显示数值
下面的代码显示了如何在垂直柱状图上显示数值:
#create vertical barplot
p = sns.barplot(x="day", y="tip", data=data, ci=None)
#show values on barplot
show_values(p)
例2:在水平条形图上显示数值
下面的代码显示了如何在水平条形图上显示数值:
#create horizontal barplot
p = sns.barplot(x="tip", y="day", data=data, ci=None)
#show values on barplot
show_values(p, "h", space=0)
注意,你使用的空间值越大,标签就会离条形图越远。
例如,让我们把空间从0改为0.05。
#create horizontal barplot
p = sns.barplot(x="tip", y="day", data=data, ci=None)
#show values on barplot
show_values(p, "h", space=0.05)
注意:要改变显示的小数位数,只需改变函数中这一行的数值。
value = '{:.1f}'.format(p.get_height())
例如,将其从.1f改为.2f,以显示两个小数位而不是一个。
其他资源
下面的教程解释了如何在seaborn中执行其他常用功能: