2016-06-16 22 views
5

Đây là một đoạn mãsanh ở biển despine() mang lại ytick nhãn

tips = sns.load_dataset("tips") 
g = sns.FacetGrid(tips, col = 'time') 
g = g.map(plt.hist, "tip") 

với sản lượng sau

enter image description here

Tôi muốn giới thiệu despine bù đắp để những âm mưu trong khi vẫn giữ phần còn lại không đổi. Vì vậy, tôi chèn chức năng despine trong mã hiện tại:

tips = sns.load_dataset("tips") 
g = sns.FacetGrid(tips, col = 'time') 
g.despine(offset=10) 
g = g.map(plt.hist, "tip") 

mà kết quả trong các lô sau

enter image description here

Kết quả là, những bù đắp được áp dụng cho các trục. Tuy nhiên, các nhãn ytick trên lô bên phải đã trở lại, mà tôi không muốn.

Có ai có thể giúp tôi về điều này không?

Trả lời

1

Để loại bỏ các nhãn yaxis đánh dấu, bạn có thể sử dụng đoạn mã sau:

Các libs:

import seaborn as sns 
sns.set_style('ticks') 

Mã điều chỉnh:

tips = sns.load_dataset("tips") 
g = sns.FacetGrid(tips, col = 'time') 
g.despine(offset=10) 
g = g.map(plt.hist, "tip") 

# IMPORTANT: I assume that you use colwrap=None in FacetGrid constructor 
# loop over the non-left axes: 
for ax in g.axes[:, 1:].flat: 
    # get the yticklabels from the axis and set visibility to False 
    for label in ax.get_yticklabels(): 
     label.set_visible(False) 
    ax.yaxis.offsetText.set_visible(False) 

enter image description here

Một chút tổng quát hơn, hình ảnh bây giờ bạn có một FacetGrid 2x2, bạn muốn loại bỏ với một offset, nhưng x- và yticklabels trở lại:

enter image description here

Hủy bỏ tất cả chúng sử dụng mã này:

tips = sns.load_dataset("tips") 
g = sns.FacetGrid(tips, col = 'time', row='sex') 
g.despine(offset=10) 
g = g.map(plt.hist, "tip") 

# IMPORTANT: I assume that you use colwrap=None in FacetGrid constructor 
# loop over the non-left axes: 
for ax in g.axes[:, 1:].flat: 
    # get the yticklabels from the axis and set visibility to False 
    for label in ax.get_yticklabels(): 
     label.set_visible(False) 
    ax.yaxis.offsetText.set_visible(False) 

# loop over the top axes: 
for ax in g.axes[:-1, :].flat: 
    # get the xticklabels from the axis and set visibility to False 
    for label in ax.get_xticklabels(): 
     label.set_visible(False) 
    ax.xaxis.offsetText.set_visible(False) 

enter image description here

UPDATE:

cho đầy đủ, mwaskom (ref to github issue) đã giải thích lý do sự cố này xảy ra:

Điều này xảy ra vì matplotlib gọi axis.reset_ticks() bên trong khi di chuyển cột sống. Nếu không, cột sống được di chuyển nhưng các ve vẫn ở cùng một vị trí. Nó không thể cấu hình trong matplotlib và, ngay cả khi nó đã được, tôi không biết nếu có một API công cộng để di chuyển cá nhân ve. Thật không may, tôi nghĩ rằng bạn sẽ phải tự mình xóa các nhãn đánh dấu sau khi bù đắp các gai.

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