向MatplotLib中的條形圖標簽添加逗號

更新時間:2024-04-02 13:59:06

問題闡述

我一直在使用ax.bar_label方法向條形圖添加數據值。這個數字很大,比如143858918。如何使用ax.bar_label方法向數據值添加逗號?我知道如何使用Annotate方法添加逗號,但是否可以使用bar_label添加逗號,我不確定。是否可以使用可用的fmt關鍵字參數?

精準答案

是否可以使用fmt關鍵字參數?

  • fmt參數基于舊的%運算符,該運算符不支持逗號分隔符。
  • 改為使用帶有f字符串的labels參數。

使用{:,.0f}格式化容器的datavalues以獲得逗號分隔符(如果需要更多小數位則增加0):

container = ax.containers[0]
ax.bar_label(container, labels=[f'{x:,.0f}' for x in container.datavalues])

或對于分組條形圖,迭代所有容器:

for container in ax.containers:
    ax.bar_label(container, labels=[f'{x:,.0f}' for x in container.datavalues])

玩具示例:

x = np.random.default_rng(123).integers(10_000_000, size=5)
fig, ax = plt.subplots()
ax.bar(range(len(x)), x)

container = ax.containers[0]
ax.bar_label(container, labels=[f'{x:,.0f}' for x in container.datavalues])