You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在堆叠柱状图中隐藏小于n的标签并控制小数位数?

隐藏堆叠柱状图中低于阈值的百分比标签并控制小数位数

绘制百分比堆叠柱状图时,因数据量大会出现大量0%的标签,希望隐藏小于指定阈值(比如n%)的标签。目前已能通过列表推导式隐藏低于特定数值的标签,但不知道如何同时控制标签的小数位数(类似fmt='%.0f%%'的效果)。

原生成图表代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = np.random.rand(5,10)
data = 10 + data*10
df = pd.DataFrame(data, columns=list('ABCDEFGHIJ'))

ax = df.plot(kind='bar', stacked=True)
for c in ax.containers:
    ax.bar_label(c, fmt='%.0f%%', label_type='center')
    ax.legend(bbox_to_anchor=(1.0, 1.0), loc='upper left')

已知的隐藏低于12的标签的代码:

ax = df.plot(kind='bar', stacked=True)
for c in ax.containers:
    labels = [v if v > 12 else "" for v in c.datavalues]    
    ax.bar_label(c, labels=labels, label_type="center")
    ax.legend(bbox_to_anchor=(1.0, 1.0), loc='upper left')

解决方案

可以在生成标签列表时,直接对符合阈值条件的数值做字符串格式化,以此控制小数位数,不符合条件的设为空字符串即可。

比如要隐藏小于5%的标签,同时保留1位小数,代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = np.random.rand(5,10)
data = 10 + data*10
df = pd.DataFrame(data, columns=list('ABCDEFGHIJ'))

ax = df.plot(kind='bar', stacked=True)
threshold = 5  # 设定阈值,小于该值的标签隐藏
for c in ax.containers:
    # 对大于阈值的数值格式化,保留1位小数并加%符号,否则为空
    labels = [f"{v:.1f}%" if v > threshold else "" for v in c.datavalues]
    ax.bar_label(c, labels=labels, label_type="center")
ax.legend(bbox_to_anchor=(1.0, 1.0), loc='upper left')
plt.tight_layout()
plt.show()

如果需要保留0位小数,只需把格式化字符串改成f"{v:.0f}%"即可,和原来的fmt='%.0f%%'效果完全一致。


内容的提问来源于stack exchange,提问作者ignotus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 14:50:43