使用matplotlib绘制堆叠条形图时如何将数值标签保留1位小数
解决方案
你遇到的标签小数位数过长问题是浮点数运算精度误差导致的:堆叠条形图计算偏移量时的底层二进制浮点存储会产生微小偏差,哪怕输入数据只有1位小数,调用patch.get_width()拿到的数值也可能出现多位小数的情况。
你只需要修改遍历条形添加标签的代码,将输出的数值做1位小数格式化即可,修改后的代码片段如下:
for patch in ax.patches: x,y = patch.get_xy() w, h = patch.get_width(), patch.get_height() # 格式化输出为1位小数,自动四舍五入 ax.text(x+w/2, y+h/2, f"{w:.1f}", ha='left', va='center', color='black', fontweight='normal', fontsize=9, )
如果不习惯用f-string格式化,也可以用round函数实现相同效果:
ax.text(x+w/2, y+h/2, str(round(w, 1)), ha='left', va='center', color='black', fontweight='normal', fontsize=9, )
推荐使用f-string格式化的方案,它会统一输出格式,即使数值是整数也会显示为X.0的格式,和你原始输入数据的展示形式保持一致。
内容的提问来源于stack exchange,提问作者Shiraz
相关产品推荐
相关产品推荐

