2013-04-02 16 views
6

Supponiamo di avere una funzione di stampa che accetta un argomento di assi (o ne restituisce uno). Esiste un metodo di basso livello per trasporre l'intera trama in modo che l'asse x diventi l'asse y e viceversa? O anche gli assi prima della trama in modo che la funzione di tracciatura faccia tutto correttamente (etichettatura) facendo affidamento sulle funzioni degli assi?python matplotlib: modo di trasporre gli assi

So come fare questo "manualmente", ma mi chiedo se c'è un livello di astrazione leggermente nascosto che consente questo tipo di trasformazione.

+1

che tipo di artisti hai sul tuoi assi? – tacaswell

+1

Una buona domanda, immagino di poter essere specifica e dire che sto pensando alla funzione di diagramma gfx collegata agli oggetti serie Panda (e DataFrame) (tramite dataframe.plot() ...). Esaminerò il codice e cercherò di ottenere informazioni più specifiche in seguito, se non hai familiarità con la funzione di trama panadas. – mathtick

+0

La cosa che mi preoccupa di questo è che ci sono troppi piccoli pezzi che dovrebbero essere cambiati separatamente e qualsiasi soluzione finirà per essere davvero fragile. – tacaswell

risposta

6

Un old post (circa 2005) alla mailing list di John Hunter. Sospetto che sia un desiderio abbastanza raro e abbastanza complicato da farlo, non è stato un senso aggiunto allora. L'esempio di

John Hunter per scambiare gli assi su un terreno esistente era

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

Non più di un involucro per la risposta di tcaswell.

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() 

Un esempio

line = plot(linspace(0, 2, 10), rand(10)) 
swap(line) 
Problemi correlati