Étiqueter les axes sur Seaborn Barplot

127

J'essaie d'utiliser mes propres étiquettes pour un barplot Seaborn avec le code suivant:

import pandas as pd
import seaborn as sns

fake = pd.DataFrame({'cat': ['red', 'green', 'blue'], 'val': [1, 2, 3]})
fig = sns.barplot(x = 'val', y = 'cat', 
                  data = fake, 
                  color = 'black')
fig.set_axis_labels('Colors', 'Values')

entrez la description de l'image ici

Cependant, j'obtiens une erreur qui:

AttributeError: 'AxesSubplot' object has no attribute 'set_axis_labels'

Ce qui donne?

Erin Shellman
la source

Réponses:

237

Le barplot de Seaborn renvoie un axe-objet (pas une figure). Cela signifie que vous pouvez effectuer les opérations suivantes:

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

fake = pd.DataFrame({'cat': ['red', 'green', 'blue'], 'val': [1, 2, 3]})
ax = sns.barplot(x = 'val', y = 'cat', 
              data = fake, 
              color = 'black')
ax.set(xlabel='common xlabel', ylabel='common ylabel')
plt.show()
sascha
la source
2
seabornn'a pas sa propre façon de définir ces derniers - sans impliquer matplotlib?
javadba le
Donc, la règle générale est FacetGrid/ tout ce que les facettes retourne un objet figure et tout le reste renvoie un objet axe?
alexpghayes
28

On peut éviter le AttributeErrorprovoqué par la set_axis_labels()méthode en utilisant le matplotlib.pyplot.xlabelet matplotlib.pyplot.ylabel.

matplotlib.pyplot.xlabeldéfinit le libellé de l'axe x tandis que le matplotlib.pyplot.ylabeldéfinit le libellé de l'axe y de l'axe actuel.

Code de la solution:

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

fake = pd.DataFrame({'cat': ['red', 'green', 'blue'], 'val': [1, 2, 3]})
fig = sns.barplot(x = 'val', y = 'cat', data = fake, color = 'black')
plt.xlabel("Colors")
plt.ylabel("Values")
plt.title("Colors vs Values") # You can comment this line out if you don't need title
plt.show(fig)

Chiffre de sortie:

entrez la description de l'image ici

Steffi Keran Rani J
la source
13

Vous pouvez également définir le titre de votre graphique en ajoutant le paramètre title comme suit

ax.set(xlabel='common xlabel', ylabel='common ylabel', title='some title')
John R
la source