Bar labels in matplotlib/Seaborn

You can loop through the containers and call ax.bar_label(...) for each of them. Note that seaborn creates one set of bars for each hue value.

The following example uses the titanic dataset and sets ci=None to avoid the error bars overlapping with the text (if error bars are needed, one could set a lighter color, e.g. errcolor="gold").

import seaborn as sns
import matplotlib.pyplot as plt

titanic = sns.load_dataset('titanic')
fig, axs = plt.subplots(ncols=2, figsize=(12, 4))

for ax, col in zip(axs, ['age', 'fare']):
    sns.barplot(
        x='sex',
        y=col,
        hue="class",
        data=titanic,
        edgecolor=".3",
        linewidth=0.5,
        ci=None,
        ax=ax
    )
    ax.set_title('mean ' + col)
    ax.margins(y=0.1) # make room for the labels
    for bars in ax.containers:
        ax.bar_label(bars, fmt="%.1f")
plt.tight_layout()
plt.show()

seaborn barplot with ax.bar_label

Leave a Comment