2017-05-09 3 views
0

Je suis en train de tracer un tracé polaire en utilisant facetGrid de Seaborn, semblable à ce qui est détaillé sur seaborn's gallery J'utilise le code suivant:Comment modifier les positions des titres de sous-placettes et des étiquettes d'axe dans 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') 

qui, avec mes données donne les éléments suivants:

enter image description here

Je veux garder cette organisation de 5 parcelles par ligne.

Le problème est que le titre de chaque sous-placette chevauche les valeurs des graduations, idem pour l'étiquette de l'axe y.

Y at-il un moyen d'empêcher ce comportement? Puis-je d'une manière ou d'une autre décaler les titres légèrement au-dessus de leur position actuelle et puis-je déplacer légèrement les étiquettes d'axe y à gauche de leur position actuelle?

Merci beaucoup d'avance!

EDIT: Ce n'est pas une copie de ce SO que le problème était que le titre d'une intrigue secondaire chevauché avec l'étiquette d'axe de une autre intrigue secondaire.

Voici mon problème est que le titre d'une intrigue secondaire chevauche avec l'étiquette de tiques la même intrigue secondaire et de même l'étiquette de l'axe chevauche avec l'étiquette de tiques la même intrigue secondaire.

Je voudrais aussi ajouter que je ne me soucie pas qu'ils se chevauchent sur mon ordinateur portable jupyter (comme comme été créé avec elle), mais je veux l'image enregistrée finale sans chevauchement, donc peut-être il y a quelque chose Je dois faire pour enregistrer l'image dans un format légèrement différent pour éviter cela, mais je ne sais pas quoi (je n'utilise que plt.savefig pour l'enregistrer).

EDIT 2: Si quelqu'un voudrait reproduire le problème ici est un exemple minimal:

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

Ce qui donne l'image suivante dans laquelle les titres ne sont pas aussi mauvais que dans mon problème d'origine (mais encore un peu de chevauchement) et l'étiquette sur le côté gauche se chevauchent complètement. enter image description here

+0

Pouvez-vous poster un [mcve] du problème? – ImportanceOfBeingErnest

+0

Juste modifié la question pour ajouter un exemple. Merci. – ejl62

Répondre

1

Pour déplacer le titre un peu plus haut, vous pouvez définir à une nouvelle position,

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

Pour déplacer le ylabel un peu plus loin à gauche, vous pouvez ajouter un peu de rembourrage

ax.yaxis.labelpad = 25 

Pour faire cela pour les axes du facetgrid, vous feriez:

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

Merci beaucoup @ImportanceOfBeingErnest, c'est exactement ce dont j'avais besoin! Merci beaucoup pour votre aide. – ejl62

1

La réponse fournie par ImportanceOfBeingErnest dans ce SO question peut aider.

+0

Non @aorr, ça ne marche pas dans ce cas, comme expliqué dans l'édition de la publication, mon problème est que le titre d'une sous-collection chevauche le label ticks de la sous-trame _same_ et de même l'étiquette de l'axe chevauche les ticks étiquette de la sous-parcelle _same_ et non de la sous-parcelle _another_ – ejl62