2014-11-17 17 views
5

Używam Pandas do rysowania matrycy wykresu rozrzutu: from pandas.tools.plotting import scatter_matrix. Problem polega na tym, że nazwy kolumn w DataFrame są zbyt długie i potrzebuję, aby były pionowe na osi X i poziome na osi Y, aby mogły się dopasować. Nie jestem w stanie w ogóle dowiedzieć się, jak to zrobić w Pandach. Wiem, jak to zrobić w matplotlib, ale nie w Pandach.Tworzenie etykiet wykresu rozrzutu w pionie iw poziomie w Pandach

Mój kod:

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

Edit: muszę korzystać pylab.clf() bo jestem kreślenia dużo liczb, więc nazywając pylab.figure() każdym razem jest zbyt czasochłonne pamięci.

+0

Chcesz nazwy kolumn mają być obracane lub kleszczy. –

Odpowiedz

4

scatter_matrix zwraca dwuwymiarową tablicę subplots matplotlib. Oznacza to, że powinieneś być w stanie iterować po dwóch tablicach i użyć funkcji matplotlib do obracania osi. W oparciu o źródła użytego do wykonania scatter_matrix i prywatnej funkcji pomocnika _label_axis, wygląda to tak, jakby powinien być w stanie wykonywać swoje obroty na wszystkich powierzchniach z:

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) 

Nie mam dobry sposób na przetestowanie to może wymagać trochę zabawy.

6

Główne pomoc od tej odpowiedzi: 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

Chciałbym móc dać ci 10 przegranych dla tej odpowiedzi – Goodword

Powiązane problemy