5

Мой вопрос довольно прост: в Matplotlib, как можно легко преобразовать координаты в системе координат в/из системы Data (В идеале я ищу простой функции output_coords = magic_func(input_coords))Python/Matplotlib: преобразование Ось <=> данных систем координат

На самом деле моя точная проблема: Я хотел бы построить matplotlib.patches.Ellipse с его центром в системе Axis, но его размер (ширина & длина) в системе данных. Но метод transforms.blended_transform_factory не работает в этом случае.

Спасибо!

+1

Вы, вероятно, следует взглянуть на [это ] (http://matplotlib.org/users/transforms_tutorial.html) – Arthur

ответ

3

Нет немедленное решение найдено, нужно написать его сам:

def axis_data_coords_sys_transform(axis_obj_in,xin,yin,inverse=False): 
    """ inverse = False : Axis => Data 
       = True : Data => Axis 
    """ 
    xlim = axis_obj_in.get_xlim() 
    ylim = axis_obj_in.get_ylim() 

    xdelta = xlim[1] - xlim[0] 
    ydelta = ylim[1] - ylim[0] 
    if not inverse: 
     xout = xlim[0] + xin * xdelta 
     yout = ylim[0] + yin * ydelta 
    else: 
     xdelta2 = xin - xlim[0] 
     ydelta2 = yin - ylim[0] 
     xout = xdelta2/xdelta 
     yout = ydelta2/ydelta 
    return xout,yout 
+0

Это приятно, спасибо. Его можно легко изменить, чтобы работать с логарифмически масштабированными осями, используя 'axis_obj_in.get_ [x или y] scale()'. – askewchan

5

Чтобы получить преобразования из Axes экземпляра ax, вы можете использовать

axis_to_data = ax.transAxes + ax.transData.inverted() 
points_data = axis_to_data.transform(points_axis) 
data_to_axis = axis_to_data.inverted() 
numpy.testing.assert_allclose(points_axis, data_to_axis.transform(points_data)) 
+0

Привет, это удивительно решило мое дело. Есть ли какая-либо страница документа, в которой сочетаются методы и классы trans *()? – grafa