Я хочу сделать markersize
равным единице по высоте. Кажется, что markersize
находится в пикселях. Как я могу узнать, насколько велика "1 единица" (вдоль данной оси), в пикселях?
Как я могу получить длину одного элемента по оси в matplotlib в пикселях?
Ответ 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
(думаю, у учебника есть что-то по этому поводу).