2016-06-16 10 views
5
zurück

Hier ist ein Code-SnippetSeaborn Despine() bringt die Ytick Etiketten

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

mit der folgenden Ausgabe

enter image description here

ich Despine auf diesen Parzellen Offset einführen wollen, während halten der Rest unverändert. Daher I eingefügt, um die Funktion Despine in dem vorhandenen Code:

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

die in den folgenden Plots ergibt

enter image description here

Als Ergebnis der Versatz der Achsen angewendet wird. Allerdings sind die ytick Etiketten auf dem rechts Grundstück zurück, was ich nicht will.

Könnte mir jemand dabei helfen?

Antwort

1

die yaxis tick Etiketten zu entfernen, Sie den Code unten verwenden:

LIBS:

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

Der eingestellte Code:

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

Ein bisschen Allgemeiner, Bild Sie haben jetzt ein 2x2 FacetGrid, Sie wollen mit einem Offset, aber die x- und yticklabels zurück:

enter image description here

entfernen sie alle mit diesem Code:

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:

für Vollständigkeit, mwaskom (ref to github issue) gab eine Erklärung, warum dieses Problem auftritt:

Das passiert also, weil matplotlib axis.reset_ticks() intern aufruft, wenn die Wirbelsäule bewegt wird. Ansonsten wird die Wirbelsäule bewegt, aber die Zecken bleiben am selben Ort. Es ist in Matplotlib nicht konfigurierbar und, selbst wenn es so wäre, weiß ich nicht, ob es eine öffentliche API zum Verschieben einzelner Ticks gibt. Unglücklicherweise denke ich, dass Sie die Zecketiketten nach dem Versetzen der Stacheln selbst entfernen müssen.