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

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


person aresnick    schedule 24.01.2012    source источник
comment
Подобно, но не дубликат: stackoverflow.com/questions/5893513/ вы можете найти это полезным.   -  person Alex    schedule 25.01.2012


Ответы (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'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 (в учебнике есть кое-что по этому поводу, я думать).

person mathematical.coffee    schedule 25.01.2012