matplotlib/Seaborn中的条形标签 [英] Bar labels in matplotlib/Seaborn

查看:40
本文介绍了matplotlib/Seaborn中的条形标签的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在 3.4 版本中,matplotlib 添加了自动 Bar 标签:

In version 3.4, matplotlib added automatic Bar labels: https://matplotlib.org/stable/users/whats_new.html#new-automatic-labeling-for-bar-charts

I'm trying to use this on a bar plot generated by Seaborn.

fig, axs = plt.subplots(
        nrows=2,
    )        

for i, col in enumerate(['col_1', 'col_2']):
        ax = axs[i]
        sns.barplot(
            x="class",
            y=col,
            hue="hue_col",
            data=data_df,
            edgecolor=".3",
            linewidth=0.5,
            ax=ax
        )


        ax.bar_label(ax.containers[i]) # Doesn't work

What do I need to do to make this work? example plot

解决方案

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()

这篇关于matplotlib/Seaborn中的条形标签的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆