2013-04-02 18 views
6

Załóżmy, że mam funkcję drukowania, która pobiera argument osi (lub zwraca jeden). Czy istnieje jakiś niskopoziomowy sposób transpozycji całego wykresu, aby oś X stała się osią Y i odwrotnie? Czy nawet osie przed działką, aby funkcja kreślenia robiła wszystko poprawnie (etykietowanie), opierając się na funkcjach osi?python matplotlib: sposób transpozycji osi

Wiem, jak to zrobić "ręcznie", ale zastanawiam się, czy istnieje nieco ukryty poziom abstrakcji, który pozwala na taką transformację.

+1

jakie artystów masz na swoich osiach? – tacaswell

+1

Dobre pytanie, myślę, że mógłbym być konkretny i wspomnieć, że myślę o funkcji fabuły gfx dołączonej do obiektów serii Panda (i DataFrame) (via dataframe.plot() ...). Sprawdzę kod i spróbuję uzyskać bardziej szczegółowe informacje później, jeśli nie znasz funkcji plotowania panad. – mathtick

+0

To, co mnie martwi, to to, że jest zbyt wiele drobiazgów, które musiałyby być oddzielnie przełączane, a każde rozwiązanie będzie naprawdę kruche. – tacaswell

Odpowiedz

6

An old post (circa 2005) na listę mailingową od Johna Huntera. Podejrzewam, że jest to dość rzadkie pragnienie i na tyle podstępne, że nie ma wtedy sensu. Przykładem

John Hunter za zamianę osi na istniejący działce był

line2d = plot(rand(10))[0] 

def swap(xdata, ydata): 
    line2d.set_xdata(ydata) 
    line2d.set_ydata(xdata) 
    draw() 

swap(line2d.get_xdata(), line2d.get_ydata()) 
0

Nie więcej niż okład na odpowiedź tcaswell użytkownika.

def swap(*line_list): 
    """ 
    Example 
    ------- 
    line = plot(linspace(0, 2, 10), rand(10)) 
    swap(line) 
    """ 
    for lines in line_list: 
     try: 
      iter(lines) 
     except: 
      lines = [lines] 

     for line in lines: 
      xdata, ydata = line.get_xdata(), line.get_ydata() 
      line.set_xdata(ydata) 
      line.set_ydata(xdata) 
      line.axes.autoscale_view() 

Przykładem

line = plot(linspace(0, 2, 10), rand(10)) 
swap(line) 
Powiązane problemy