我使用以下代码创建条形图:
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()
返回的x值,例如-0.4, 0.6, 1.6, 2.6, 3.6, 4.6, 5.6
,是如何计算的?这些值与图中 x 轴上的条形位置有何关系?
plt.bar
时,该函数使用连续的整数范围来确定条形在 x 轴上的位置,即 range(len(products))
。使用 width=0.8
和 align='center'
的默认设置,整数 0、1 等代表条形的中心,并在两侧延伸 0.4 个单位 (width/2
)。
Rectangle.get_x
返回矩形的left坐标。因此,b.get_x
返回的值将是:
np.arange(7) - (0.8/2)
array([-0.4, 0.6, 1.6, 2.6, 3.6, 4.6, 5.6])
在您的代码中,您可以使用 Rectangle.get_width
再次向这些值添加(0.8/2)(宽度的一半)以获得条形的中心。 认识到这一点,原则上你也可以编写以下代码来达到相同的结果:
q = plt.bar(products, price)
for x, y in zip(range(len(products)), price):
plt.text(x=x, y=y, s=round(y, 2), ha='center', va='bottom')
locs = plt.gca().get_xticks()
plt.show()