2016-06-16 10 views
5

Oto fragment koduSeaborn despine() przywraca ytick etykiet

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

z następującym wyjściu

enter image description here

Chcę wprowadzić despine offsetowego do tych działek przy zachowaniu reszta bez zmian. Dlatego dodaje funkcję despine w istniejącym kodzie:

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

co skutkuje w następujących działek

enter image description here

W rezultacie, to korekcja jest stosowana do osi. Jednak z powrotem, których nie chcę, są gotowe etykiety na prawym wykresie.

Czy ktoś może mi w tym pomóc?

Odpowiedz

1

Aby usunąć etykiety yAxis kleszcza, można użyć poniższy kod:

libs:

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

Kodeksu skorygowana:

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

A bit bardziej ogólny, obrazek, w którym masz teraz FacetGrid 2x2, chcesz despinę z przesunięciem, ale x- i yticklabels powrotu:

enter image description here

Usuń je wszystkie za pomocą tego kodu:

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:

dla kompletności, mwaskom (ref to github issue) dało wyjaśnienie, dlaczego występuje ten problem:

Tak się dzieje, ponieważ matplotlib wywołuje funkcję axis.reset_ticks() wewnętrznie podczas przesuwania kręgosłupa. W przeciwnym razie kręgosłup zostaje przesunięty, ale kleszcze pozostają w tym samym miejscu. Nie można go konfigurować w matplotlib, a nawet jeśli nie było, nie wiem, czy istnieje publiczny interfejs API do przenoszenia pojedynczych znaczników. Niestety myślę, że będziesz musiał usunąć etykiety samoprzylepne po skompensowaniu kolców.