How to Show Values on Seaborn Barplot (With Examples)


You can use the following function to display the values on a 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)

This function works for both horizontal and vertical barplots.

The following examples show how to use this function in practice with the built-in seaborn “tips” dataset:

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

Example 1: Show Values on Vertical Barplot

The following code shows how to display the values on a vertical barplot:

#create vertical barplot
p = sns.barplot(x="day", y="tip", data=data, ci=None)

#show values on barplot
show_values(p)

Example 2: Show Values on Horizontal Barplot

The following code shows how to display the values on a horizontal barplot:

#create horizontal barplot
p = sns.barplot(x="tip", y="day", data=data, ci=None)

#show values on barplot
show_values(p, "h", space=0)

Note that the larger the value you use for space, the further away the labels will be from the bars.

For example, let’s change the space from 0 to .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)

Note: To change the number of decimal places shown, simply change the value in this line of the function:

value = '{:.1f}'.format(p.get_height())

For example, change it from .1f to .2f to show two decimal places instead of one.

Additional Resources

The following tutorials explain how to perform other common functions in seaborn:

How to Create a Pie Chart in Seaborn
How to Create a Time Series Plot in Seaborn
How to Create Multiple Seaborn Plots in One Figure

Leave a Reply

Your email address will not be published.