Как я могу получить длину одного элемента по оси в matplotlib в пикселях?

Я хочу сделать markersize равным единице по высоте. Кажется, что markersize находится в пикселях. Как я могу узнать, насколько велика "1 единица" (вдоль данной оси), в пикселях?

Ответ 1

Посмотрите Учебник по трансформациям (ничего себе, что потребовалось много рыть, чтобы найти -!)

В частности, axes.transData.transform(points) возвращает координаты пикселей, где (0,0) находится в левом нижнем углу окна просмотра.

import matplotlib.pyplot as plt

# set up a figure
fig = plt.figure()
ax = fig.add_subplot(111)
x = np.arange(0, 10, 0.005)
y = np.exp(-x/2.) * np.sin(2*np.pi*x)
ax.plot(x,y)

# what one vertical unit & one horizontal unit in pixels?
ax.transData.transform([(0,1),(1,0)])-ax.transData.transform((0,0))
# Returns:
# array([[   0.,  384.],   <-- one y unit is 384 pixels (on my computer)
#        [ 496.,    0.]])  <-- one x unit is 496 pixels.

Существуют различные другие преобразования, которые вы можете сделать - координаты относительно ваших данных относительно осей, как часть фигуры, или в пикселях для рисунка (учебник по преобразованиям действительно хорош).

Чтобы конвертировать между пикселями и точками (точка равна 1/72 дюйма), вы можете играть с matplotlib.transforms.ScaledTransform и fig.dpi_scale_trans (думаю, у учебника есть что-то по этому поводу).