计算条形图中的 x 轴值

问题描述 投票:0回答:1

我使用以下代码创建条形图:

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 轴上的条形位置有何关系?

python matplotlib plot
1个回答
0
投票

当您将字符串列表传递给

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()

bar plot

© www.soinside.com 2019 - 2024. All rights reserved.