J'essaie de créer des graphiques qui montrent la corrélation du paramètre «valeur» avec différents paramètres catégoriels. Voici ce que j'ai jusqu'à présent:

plot = sns.pairplot(df, x_vars=['country', 'tier_code', 'industry', 'company_size', 'region'], y_vars=['value'], height=10)

Ce qui produit l'ensemble de tracés suivant:

enter image description here

Comme vous pouvez le voir, l'axe des x est extrêmement encombré pour les graphiques «pays» et «industrie». Je voudrais faire pivoter les étiquettes de catégorie de 90 degrés afin qu'elles ne se chevauchent pas.

Tous les exemples de rotation que j'ai pu trouver concernaient d'autres types de parcelles et ne fonctionnaient pas pour le graphique à paires. Je pourrais probablement le faire fonctionner si je faisais chaque intrigue séparément en utilisant catplot, mais j'aimerais les faire toutes en même temps. Est-ce possible?

J'utilise Google Colab au cas où cela ferait une différence. Mon numéro de version Seaborn est 0.10.0.

0
user3207874 25 avril 2020 à 15:29

2 réponses

Meilleure réponse

La réponse de Manish utilise la méthode get_xticklabels, qui ne joue pas toujours bien avec les fonctions Seaborn de niveau supérieur de mon expérience. Voici donc une solution pour éviter cela. Comme je n'ai pas vos données, j'utilise le jeu de données tips de seaborn comme exemple.

Je nomme l'objet renvoyé par sns.pairplot() grid, juste pour nous rappeler qu'il s'agit d'une instance PairGrid. En général, son attribut axes produit un tableau bidimensionnel d'objets axes, correspondant à la grille de sous-tracé. J'utilise donc la méthode flat pour transformer cela en un tableau à une dimension, bien que cela ne soit pas nécessaire dans votre cas particulier avec une seule ligne de sous-graphiques.

Dans mon exemple, je ne veux pas faire pivoter les étiquettes pour le troisième sous-tracé, car ce sont des chiffres uniques, donc je découpe le tableau des axes en conséquence avec [:2].

import seaborn as sns
sns.set()

tips = sns.load_dataset("tips")

grid = sns.pairplot(tips, x_vars=['sex', 'day', 'size'], y_vars=['tip']) 

for ax in grid.axes.flat[:2]:
    ax.tick_params(axis='x', labelrotation=90)

sample plot with rotated x labels

3
Arne 29 avril 2020 à 20:51

Vous pouvez faire pivoter les étiquettes de l'axe X comme suit:

plot = sns.pairplot(df, x_vars=['country', 'tier_code', 'industry', 'company_size', 'region'], 
                     y_vars=['value'], height=10)

rotation = 90
for axis in plot.fig.axes:   # get all the axis
     axis.set_xticklabels(axis.get_xticklabels(), rotation = rotation)

plot.fig.show()

J'espère que cela aide.

-1
MANISH K C 30 avril 2020 à 12:44