2013-01-24 9 views
5

utworzyć pandas rozproszenia macierzy usng następujący kod:pandy 3x3 rozrzut matrycy Brak etykiet

import numpy as np 
import pandas as pd 

a = np.random.normal(1, 3, 100) 
b = np.random.normal(3, 1, 100) 
c = np.random.normal(2, 2, 100) 

df = pd.DataFrame({'A':a,'B':b,'C':c}) 
pd.scatter_matrix(df, diagonal='kde') 

Wynik w następujący rozpraszania macierzy: enter image description here

pierwszy rząd nie ma ytick etykiety, 3 kolumna bez etykiet xtick, 3 pozycja "C" nie jest oznaczona etykietą.

Każdy pomysł, jak uzupełnić tę fabułę brakującymi etykietami?

Odpowiedz

5

Uzyskaj dostęp do omawianego wątku i zmień jego ustawienia w ten sposób.

axes = pd.scatter_matrix(df, diagonal='kde') 
ax = axes[2, 2] # your bottom-right subplot 
ax.xaxis.set_visible(True) 
draw() 

Można sprawdzić, w jaki sposób funkcja scatter_matrix dotyczy etykietowania pod poniższym linkiem. Jeśli ciągle to robisz, rozważ skopiowanie kodu do pliku i utworzenie własnej niestandardowej funkcji scatter_matrix.

https://github.com/pydata/pandas/blob/master/pandas/tools/plotting.py#L160

Edit, w odpowiedzi na odrzuconej Komentarz:

Oczywiste rozszerzenia tego, robiąc ax[0, 0].xaxis.set_visible(True) i tak dalej, nie działają. Z jakiegoś powodu, scatter_matrix wydaje się ustawiać tyknięcia i etykiety dla osi [2, 2], nie czyniąc ich widocznymi, ale nie ustawia tyknięć i etykiet dla reszty. Jeśli zdecydujesz, że konieczne jest wyświetlanie tyknięć i etykiet na innych wątkach, będziesz musiał głębiej zagłębić się w kod połączony powyżej.

szczególności, zmiany warunków na if do:

if i == 0 
if i == n-1 
if j == 0 
if j == n-1 

odpowiednio. Nie testowałem tego, ale myślę, że to wystarczy.

+0

ok, dzięki. Jest to pomocne. – ronnydw

1

Ponieważ nie mogę odpowiadać powyżej, nie zmieniając wersja kodu źródłowego dla nikogo googlowania jest:

n = len(features) 

for x in range(n): 
    for y in range(n): 
     sax = axes[x, y] 
     if ((x%2)==0) and (y==0): 
      if not sax.get_ylabel(): 
       sax.set_ylabel(features[-1])  
      sax.yaxis.set_visible(True) 

     if (x==(n-1)) and ((y%2)==0): 
      sax.xaxis.set_visible(True) 

     if ((x%2)==1) and (y==(n-1)): 
      if not sax.get_ylabel(): 
       sax.set_ylabel(features[-1])  
      sax.yaxis.set_visible(True) 

     if (x==0) and ((y%2)==1): 
      sax.xaxis.set_visible(True) 

cechy lista nazw kolumn