2013-01-24 34 views
5

tôi tạo ra một gấu trúc phân tán-ma trận usng đoạn mã sau:gấu trúc 3x3 phân tán-matrix thiếu nhãn

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

kết quả trong phân tán-ma trận sau này: enter image description here

Hàng đầu tiên không có ytick nhãn, cột thứ 3 không có nhãn xtick, mục thứ 3 'C' không được gắn nhãn.

Bất kỳ ý tưởng nào về cách hoàn thành bản đồ này với các nhãn bị thiếu?

Trả lời

5

Truy cập subplot được đề cập và thay đổi cài đặt của nó như vậy.

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

Bạn có thể kiểm tra cách hàm scatter_matrix xử lý nhãn ở liên kết bên dưới. Nếu bạn thấy mình làm điều này hơn và hơn, hãy xem xét sao chép mã vào tệp và tạo hàm scatter_matrix tùy chỉnh của riêng bạn.

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

Chỉnh sửa, để đáp ứng với một lời nhận xét từ chối:

Các phần mở rộng rõ ràng điều này, làm ax[0, 0].xaxis.set_visible(True) và vân vân, không có tác dụng. Đối với một số lý do, scatter_matrix dường như thiết lập ve và nhãn cho trục [2, 2] mà không làm cho chúng hiển thị, nhưng nó không thiết lập ve và nhãn cho phần còn lại. Nếu bạn quyết định rằng nó là cần thiết để hiển thị bọ ve và nhãn trên subplots khác, bạn sẽ phải đào sâu hơn vào mã liên kết ở trên.

Cụ thể, thay đổi các điều kiện trên nếu phát biểu để:

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

tương ứng. Tôi đã không thử nghiệm điều đó, nhưng tôi nghĩ rằng nó sẽ làm các trick.

+0

ok, cảm ơn. Điều này rất hữu ích. – ronnydw

1

Vì tôi không thể trả lời ở trên, không thay đổi phiên bản mã nguồn cho ai googling là:

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) 

tính năng là danh sách các tên cột

Các vấn đề liên quan