具有新 f 字符串格式样式的条形标签

Kon*_*tin 6 python matplotlib bar-chart plot-annotations

matplotlib 3.4.0开始,Axes.bar_label方法允许标记条形图。

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

我怎样才能使它与新的样式格式一起工作,使我能够执行百分比、千位分隔符等操作: '{:,.2f}', '{:.2%}', ...

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

tdy*_*tdy 17

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

  • 从 matplotlib 3.7 开始

    fmt参数现在直接支持{}基于格式字符串,例如:

    # >= 3.7
    plt.bar_label(bars, fmt='{:,.2f}')
    #                       ^no f here (not an actual f-string)
    
    Run Code Online (Sandbox Code Playgroud)
  • matplotlib 3.7 之前的版本

    fmt参数不支持{}基于格式字符串,因此请使用该labels参数。datavalues使用 f 字符串格式化 bar 容器并将其设置为labels,例如:

    # < 3.7
    plt.bar_label(bars, labels=[f'{x:,.2f}' for x in bars.datavalues])
    
    Run Code Online (Sandbox Code Playgroud)

例子: