5

Moje pytanie jest dość prosta: w matplotlib, w jaki sposób można łatwo przekonwertować współrzędne w układzie osi do/z systemu danych (idealnie szukam prostej funkcji output_coords = magic_func(input_coords))Python/matplotlib: konwersja współrzędnych osi <=> Data Systems

Faktycznie mój dokładny problem to: Chciałbym wykreślić matplotlib.patches.Ellipse z jego centrum w systemie Osi, ale jego rozmiar (szerokość & długości) w systemie danych. Metoda transforms.blended_transform_factory nie działa w tym przypadku.

Dzięki!

+1

Prawdopodobnie powinien rzucić okiem na [ten ] (http://matplotlib.org/users/transforms_tutorial.html) – Arthur

Odpowiedz

3

Nie natychmiastowe rozwiązanie znalezione, należy napisać to sam:

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

To jest miłe, dzięki. Można go łatwo zmodyfikować tak, aby działał również dla skalowanych osi logów, używając 'axis_obj_in.get_ [x lub y] scale()'. – askewchan

5

Aby uzyskać transformacje z instancji axAxes, można użyć

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

Cześć, to niesamowicie rozwiązało moją sprawę. Czy jest jakaś strona z dokumentami opisująca metody i klasy trans *()? – grafa

Powiązane problemy