5

La mia domanda è molto semplice: in matplotlib, come posso facilmente convertire le coordinate nel sistema di assi da/sistema di Data (Idealmente Sto cercando una semplice funzione output_coords = magic_func(input_coords))Python/Matplotlib: convertire Axis <=> coordina Data Systems

In realtà il mio problema esatto è: Mi piacerebbe tracciare un matplotlib.patches.Ellipse con il suo centro nel sistema Axis ma la sua dimensione (larghezza & lunghezza) nel sistema dati. Ma il metodo transforms.blended_transform_factory non funziona in questo caso.

Grazie!

+1

Probabilmente dovreste dare un'occhiata a [questo ] (http://matplotlib.org/users/transforms_tutorial.html) – Arthur

risposta

3

Nessuna soluzione immediata trovata, hanno bisogno di scrivere da solo:

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

Questo è bello, grazie. Potrebbe essere facilmente modificato per lavorare anche per gli assi di registro, usando 'axis_obj_in.get_ [x o y] scale()'. – askewchan

5

Per ottenere trasformazioni dal Axes esempio ax, è possibile utilizzare

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

Salve, questo ha risolto incredibilmente il mio caso. Esiste una pagina doc in cui vengono combinati i metodi e le classi trans *()? – grafa