Неправильное расположение прямоугольника в matplotlib

строю заговор с барами и яm пытается найти их абсолютное местоположение (в пикселях) на графике для дальнейшей обработки позже. Мне кажется, что это должно быть в состоянии понять из matplotlib 'Информация о преобразовании в экземпляре осей. В частности, ям используюax.transData перейти от координат данных (где я знаю позиции блока), чтобы отобразить координаты. Вот некоторый код:

import matplotlib.pyplot as plt

x = range(10)
y = range(1, 11)

fig = plt.figure()
ax = fig.add_subplot(111)
bars = ax.bar(x, y, width=.5, label="foo")
ax.monkey_rectangles = bars
ax.legend()

def get_useful_info(fig):
    for ax in fig.get_axes():
        for rect in ax.monkey_rectangles:
            corners = rect.get_bbox().corners()[::3]
            pos = ax.transData.transform(corners)
            left = pos[0,0]
            width = pos[1,0] - pos[0,0]
            bottom = pos[0,1]
            height = pos[1,1] - pos[0,1]
            yield left, width, bottom, height

fig.savefig('foo.png')
for l, w, b, h in get_useful_info(fig):
    print l, w, b, h

Это печатает следующее:

80.0 24.8 48.0 38.4
129.6 24.8 48.0 76.8
179.2 24.8 48.0 115.2
228.8 24.8 48.0 153.6
278.4 24.8 48.0 192.0
328.0 24.8 48.0 230.4
377.6 24.8 48.0 268.8
427.2 24.8 48.0 307.2
476.8 24.8 48.0 345.6
526.4 24.8 48.0 384.0

Итак, matplotlib считает, что мои блоки имеют ширину 24,8 единиц (я полагаю, пикселей). Тот'Это хорошо, за исключением случаев, когда я действительно измеряю ширину блока, я получаю что-то более 32 пикселя в ширину. В чем здесь расхождение?

Ответы на вопрос(2)

Ваш ответ на вопрос