Как я могу получить длину одной единицы на оси в matplotlib, в пикселях? - PullRequest
10 голосов
/ 24 января 2012

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

1 Ответ

10 голосов
/ 25 января 2012

Взгляните на учебник Transformations (вау, на поиски ушло много копаний -!)

В частности, 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's 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 (учебник имеет что-то на это, я думаю).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...