5

Meine Frage ist ganz einfach: in matplotlib, wie kann ich leicht Koordinaten in Achssystem konvertieren zum/vom Datensystem (Ideal für eine einfache Funktion output_coords = magic_func(input_coords) ich suche)Python/Matplotlib: convert Achse <=> Datenkoordinatensysteme

Eigentlich ist mein genaues Problem: Ich möchte eine matplotlib.patches.Ellipse mit seinem Zentrum in Axis System, aber seine Größe (Breite & Länge) im Datensystem plotten. Aber die transforms.blended_transform_factory Methode funktioniert in diesem Fall nicht.

Danke!

+1

Sie wahrscheinlich sollte einen Blick auf [diese verwenden können ] (http://matplotlib.org/users/transforms_tutorial.html) – Arthur

Antwort

3

keine sofortige Lösung gefunden, müssen es selbst schreiben:

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

Das ist nett, danke. Es könnte leicht modifiziert werden, um auch für logarithmisch skalierte Achsen zu arbeiten, wobei 'axis_obj_in.get_ [x oder y] scale() 'verwendet wird. – askewchan

5

Transformationen Um vom Axes Instanz ax Sie

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

Hallo, das hat meinen Fall erstaunlich gelöst. Gibt es eine Doc-Seite, auf der trans *() Methoden und Klassen erklärt werden? – grafa