2017-05-09 2 views
0

Ich versuche, ein Polarplot mit Seaborn des facetGrid ähnlich zu zeichnen, was auf seaborn's gallery ich den folgenden Code verwende detailliert beschrieben wird: die folgendenWie ändert man die Positionen von Subplot-Titeln und Achsenbeschriftungen in Seaborn FacetGrid?

sns.set(context='notebook', style='darkgrid', palette='deep', font='sans-serif', font_scale=1.25) 

# Set up a grid of axes with a polar projection 
g = sns.FacetGrid(df_total, col="Construct", hue="Run", col_wrap=5, subplot_kws=dict(projection='polar'), size=5, sharex=False, sharey=False, despine=False) 

# Draw a scatterplot onto each axes in the grid 
g.map(plt.plot, 'Rad', ''y axis label', marker=".", ms=3, ls='None').set_titles("{col_name}") 

plt.savefig('./image.pdf') 

die mit meinen Daten gibt:

enter image description here

Ich möchte diese Organisation von 5 Plots pro Linie halten.

Das Problem besteht darin, dass sich der Titel jedes Teilplots mit den Werten der Teilstriche überschneidet, wie bei der Beschriftung der y-Achse.

Gibt es eine Möglichkeit, dieses Verhalten zu verhindern? Kann ich die Titel leicht über ihre aktuelle Position verschieben und kann ich die Y-Achsenbeschriftungen leicht links von ihrer aktuellen Position verschieben?

Vielen Dank im Voraus!

EDIT: Dies ist kein Duplikat dieser SO wie das Problem war, dass der Titel eines subplot mit der Achsenbeschriftung überlappt eine andere subplot.

Hier mein Problem ist, dass der Titel eines subplot mit dem Zecken-Label von überlappt den gleich subplot und in ähnlicher Weise der Achsenbeschriftung überlappt mit dem Zecken-Label von der gleich subplot.

Ich möchte auch hinzufügen, dass ich, dass sie auf meinem jupyter Notebook nicht überlappen kümmern (wie es wie es erstellt wurde), aber ich will das letzte gespeicherte Bild ohne Überlappung, so vielleicht gibt es etwas, Ich muss tun, um das Bild in einem etwas anderen Format zu speichern, um das zu vermeiden, aber ich weiß nicht was (ich verwende nur plt.savefig, um es zu speichern).

EDIT 2: Wenn jemand das Problem hier reproduzieren möchte, ist ein minimales Beispiel:

import matplotlib.pyplot as plt 
import numpy as np 
import pandas as pd 
import seaborn as sns 

sns.set() 
sns.set(context='notebook', style='darkgrid', palette='deep', font='sans-serif', font_scale=1.5) 
# Generate an example radial datast 
r = np.linspace(0, 10000, num=100) 
df = pd.DataFrame({'label': r, 'slow': r, 'medium-slow': 1 * r, 'medium': 2 * r, 'medium-fast': 3 * r, 'fast': 4 * r}) 

# Convert the dataframe to long-form or "tidy" format 
df = pd.melt(df, id_vars=['label'], var_name='speed', value_name='theta') 

# Set up a grid of axes with a polar projection 
g = sns.FacetGrid(df, col="speed", hue="speed", 
        subplot_kws=dict(projection='polar'), size=4.5, col_wrap=5, 
        sharex=False, sharey=False, despine=False) 

# Draw a scatterplot onto each axes in the grid 
g.map(plt.scatter, "theta", "label") 

plt.savefig('./image.png') 
plt.show() 

Welche folgende Bild gibt, in denen die Titel sind nicht so schlimm wie in meinem ursprünglichen Problem (aber immer noch etwas überlappen) und die Beschriftung auf der linken Seite überlappen vollständig. enter image description here

+0

Können Sie eine [MCVE] des Problems? – ImportanceOfBeingErnest

+0

Bearbeiten Sie die Frage, um ein Beispiel hinzuzufügen. Vielen Dank. – ejl62

Antwort

1

Um den Titel ein wenig höher zu bewegen Sie neue Position gesetzt,

ax.title.set_position([.5, 1.1]) 

Um die ylabel ein wenig weiter nach links zu bewegen, Sie einig padding

ax.yaxis.labelpad = 25 

hinzufügen Um dies für die Achsen des Facet-Gitters zu tun, würden Sie tun:

for ax in g.axes: 
    ax.title.set_position([.5, 1.1]) 
    ax.yaxis.labelpad = 25 
+0

Vielen Dank @ImportanceOfBeingErnest, das ist genau das, was ich brauchte! Vielen dank für Deine Hilfe. – ejl62

1

Die Antwort von ImportanceOfBeingErnest in dieser SO question kann helfen.

+0

Nein @ aorr, es funktioniert nicht in diesem Fall, wie in der Bearbeitung des Beitrags erläutert, mein Problem ist, dass der Titel eines Teilplots mit dem Ticks-Label des _Same_ Teilplots überlappt und ähnlich die Achsenbezeichnung mit den Ticks überlappt Label der _Same_ Subplot und nicht _another_ Subplot – ejl62

Verwandte Themen