如何在Seaborn Barplot上显示数值(附实例)

3,994 阅读1分钟

你可以使用以下函数来显示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中执行其他常用功能:

如何在Seaborn中创建饼图
如何在Seaborn中创建时间序列图
如何在一个图中创建多个Seaborn图