Matplotlib柱状图中b.get_x()返回的X轴数值计算逻辑解析
关于Matplotlib柱状图中
b.get_x()数值的计算逻辑 代码示例
import matplotlib.pyplot as plt products = ['mouse','keyboard','antivirus','scanner','pendrive','battery','mobile'] price = [500, 1200, 550, 4500, 3500, 1500, 2500] plt.title('Scene-1') q = plt.bar(products, price) for b in q: val = b.get_height() plt.text(b.get_x() + b.get_width()/2, val, round(val, 2), ha= 'center', va= 'bottom') print(b) print('b.get_x()', '\n', b.get_x()) plt.show()
问题
b.get_x()返回的如-0.4、0.6、1.6、2.6、3.6、4.6、5.6这类X轴数值是如何计算的?这些数值与图表中条形在X轴上的位置有什么关联?
解答
分类X轴的坐标映射
Matplotlib处理字符串类型的分类X轴时,会自动把每个分类映射成连续的整数坐标:第一个分类mouse对应0,第二个keyboard对应1,直到最后一个mobile对应6。b.get_x()的计算逻辑
柱状图默认的条形宽度是0.8(可通过plt.bar(width=...)修改),b.get_x()返回的是每个条形左边缘的X坐标,计算公式为:对应分类的整数坐标 - 条形宽度/2
比如:
mouse对应的整数坐标是0,左边缘坐标为0 - 0.8/2 = -0.4keyboard对应的整数坐标是1,左边缘坐标为1 - 0.8/2 = 0.6- 后续分类依次类推,得到1.6、2.6等数值。
- 与条形位置的关联
这些数值直接对应条形在X轴上的实际位置:
b.get_x()是条形左边缘的坐标b.get_x() + b.get_width()是条形右边缘的坐标- 两者的中点
b.get_x() + b.get_width()/2正好等于分类对应的整数坐标(0、1、2...6),也就是条形的中心位置,这也是你代码中用来放置数值标签的位置,确保标签居中显示在条形上方。
内容的提问来源于stack exchange,提问作者Zaman
相关产品推荐
相关产品推荐

