2014-11-17 13 views
5

Sto utilizzando Pandas per disegnare una matrice di dispersione di immagini: from pandas.tools.plotting import scatter_matrix. Il problema è che i nomi delle colonne nello DataFrame sono troppo lunghi e ho bisogno che siano verticali nell'asse xe orizzontale nell'asse y in modo che possano adattarsi. Non sono in grado di capire come farlo a Pandas. So come farlo in matplotlib ma non in Panda.Creazione delle etichette del diagramma di dispersione verticale e orizzontale in Pandas

Il mio codice:

pylab.clf() 
df = pd.DataFrame(X, columns=the_labels) 
axs = scatter_matrix(df, alpha=0.2, diagonal='kde') 

Edit: ho bisogno di usare pylab.clf() perché sto tracciando un sacco di figure, in modo da chiamare pylab.figure() ogni volta che viene troppo consumo di memoria.

+0

Vuoi i nomi delle colonne per essere ruotati o zecche. –

risposta

4

scatter_matrix restituisce un array bidimensionale di sottotrotme matplotlib. Ciò significa che dovresti essere in grado di scorrere i due array e utilizzare le funzioni matplotlib per ruotare gli assi. Sulla base della fonte utilizzata per implementare scatter_matrix e la funzione di supporto privato _label_axis, sembra che si dovrebbe essere in grado di eseguire le vostre rotazioni per tutte le trame con:

from matplotlib.artist import setp 

x_rotation = 90 
y_rotation = 90 

for row in axs: 
    for subplot in row: 
     setp(subplot.get_xticklabels(), rotation=x_rotation) 
     setp(subplot.get_yticklabels(), rotation=y_rotation) 

non ho un buon modo per testare questo quindi potrebbe richiedere un po 'di gioco.

6

maggiore aiuto da questa risposta: https://stackoverflow.com/a/18994338/2632856

a = [[1,2], [2,3], [3,4], [4, 5], [1, 6], [2,7], [1,8]] 
df = pd.DataFrame(a,columns=['askdabndksbdkl','aooweoiowiaaiwi']) 
axs = pd.scatter_matrix(df, alpha=0.2, diagonal='kde') 
n = len(df.columns) 
for x in range(n): 
    for y in range(n): 
     # to get the axis of subplots 
     ax = axs[x, y] 
     # to make x axis name vertical 
     ax.xaxis.label.set_rotation(90) 
     # to make y axis name horizontal 
     ax.yaxis.label.set_rotation(0) 
     # to make sure y axis names are outside the plot area 
     ax.yaxis.labelpad = 50 

enter image description here

+0

Vorrei poterti dare 10 upvotes per questa risposta – Goodword

Problemi correlati