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

Pandas Series绘图时bar_label标注值偏移1的问题排查

柱状图bar_label标注值与Series实际值偏移的成因

我尝试使用Pandas Series内置的.plot()方法绘制柱状图,发现图表中的bar_label标注值比Series中的实际值大1。相关代码如下:

import pandas as pd
import numpy as np

data = np.array([10000, 1000, 100, 10, 5, 1])
 
ser = pd.Series(data, index=[1, 2, 3, 4, 5, 6])

print(ser)

ax = ser.sort_index().plot(log=True, kind="bar")

for container in ax.containers:
    ax.bar_label(container)

执行后Series输出为:

1    10000
2     1000
3      100
4       10
5        5
6        1
dtype: int64

生成的柱状图标注出现偏移,请问该问题的成因是什么?


成因分析

问题根源在于**对数坐标轴(log=True)**和bar_label的默认行为不兼容:

  • 当你设置log=True时,Pandas只是把图表的y轴切换为对数刻度,柱子的高度仍然对应Series的原始数据值;
  • 但Matplotlib的ax.bar_label()默认不会直接使用原始数据做标注,而是读取柱子在对数轴上的像素位置,再反向计算对应轴刻度值。这个转换过程在非整数幂次的数值(比如5、1)上会出现偏差,就导致了你看到的标注值比实际值大1的情况;
  • 简单说,bar_label默认的标注逻辑是为线性轴设计的,放到对数轴上就会出现计算错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:52:08