具有新f-字符串格式样式的Matplotlib条形图标签 [英] Matplotlib bar labels with new f-string format style

查看:0
本文介绍了具有新f-字符串格式样式的Matplotlib条形图标签的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

matplotlib 3.4.0起,Axes.bar_label方法允许为条形图添加标签。

但是,标签格式选项适用于旧样式格式,例如fmt='%g'

如何才能使其与新的样式格式一起工作,从而允许我执行百分比、千位分隔符等操作:'{:,.2f}', '{:.2%}', ...

我首先想到的是以某种方式从ax.containers中获取初始标签,然后重新格式化它们,但它还需要适用于不同的条形图结构、不同格式的分组条形图等。

推荐答案

如何使用百分比、千位分隔符等新样式格式?

使用新的bar_label方法,使用labels参数。使用所需的f字符串设置条形容器的datavalues的格式,并将其设置为labels


例如:

  • 千位分隔符f字符串

    bars = plt.bar(list('ABC'), [12344.56, 23456.78, 34567.89])
    
    plt.bar_label(bars, labels=[f'${x:,.2f}' for x in bars.datavalues])
    

  • f字符串百分比

    bars = plt.bar(list('ABC'), [0.123456, 0.567890, 0.789012])
    
    plt.bar_label(bars, labels=[f'{x:.2%}' for x in bars.datavalues])
    

  • 堆叠百分比f字符串

    x = list('ABC')
    y = [0.7654, 0.6543, 0.5432]
    
    fig, ax = plt.subplots()
    ax.bar(x, y)
    ax.bar(x, 1 - np.array(y), bottom=y)
    
    # now 2 bar containers: white labels for blue bars, black labels for orange bars
    colors = list('wk')
    for bars, color in zip(ax.containers, colors):
        labels = [f'{x:.1%}' for x in bars.datavalues]
        ax.bar_label(bars, labels=labels, color=color, label_type='center')
    

这篇关于具有新f-字符串格式样式的Matplotlib条形图标签的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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