Oznacz osie na wykresie Barplot Seaborn

125

Próbuję użyć własnych etykiet dla wykresu paskowego Seaborn z następującym kodem:

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

wprowadź opis obrazu tutaj

Jednak pojawia się błąd, który:

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

Co daje?

Erin Shellman
źródło

Odpowiedzi:

235

Wykres słupkowy Seaborn zwraca obiekt-oś (nie figurę). Oznacza to, że możesz wykonać następujące czynności:

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
źródło
2
seabornnie ma własnego sposobu, aby to ustawić - bez angażowania matplotlib?
javadba
Więc ogólna zasada brzmi FacetGrid/ cokolwiek, co fasety zwraca obiekt figury, a wszystko inne zwraca obiekt osi?
alexpghayes
27

Można uniknąć AttributeErrorspowodowanego przez set_axis_labels()metodę, używając matplotlib.pyplot.xlabeli matplotlib.pyplot.ylabel.

matplotlib.pyplot.xlabelustawia etykietę osi x, podczas gdy matplotlib.pyplot.ylabelustawia etykietę osi y bieżącej osi.

Kod rozwiązania:

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)

Rysunek wyjściowy:

wprowadź opis obrazu tutaj

Steffi Keran Rani J
źródło
13

Możesz także ustawić tytuł wykresu, dodając parametr title w następujący sposób

ax.set(xlabel='common xlabel', ylabel='common ylabel', title='some title')
John R.
źródło