Как привязать кетплот сиборна к сетке

#pandas #dataframe #matplotlib #jupyter-notebook #seaborn

Вопрос:

Я сделал сетку 2×2 и пытаюсь построить схему во втором ряду примерно так:

 fig = plt.figure(figsize=(10,5), constrained_layout=True)
gs = GridSpec(nrows=2, ncols=2, figure=fig)

# Chart 1
ax1 = fig.add_subplot(gs[0,0]) 

ax1=sns.countplot(x='product', data = df)    #Countplot 
plt.title('Product sales', fontweight='bold', fontsize = 8)
plt.ylabel('Count', fontsize = 7)
plt.xlabel('Product', fontsize = 7)

# Chart 2
ax2 = fig.add_subplot(gs[0,1]) 
ax2= sns.countplot(x='maritalstatus', data = df)    #Countplot 
plt.title('Marital status of customers', fontweight='bold', fontsize = 8)
plt.ylabel('', fontsize = 7)
plt.xlabel('Marital status', fontsize = 7)

# chart 3
ax2 = fig.add_subplot(gs[1,:]) 
ax3 = sns.catplot(x = 'product', hue = "gender", col = "maritalstatus", data = df, kind = 'count')

plt.show()
 

Но вторая строка не отображается на диаграмме, а отображается под пустым графиком.

Выход: введите описание изображения здесь

Ответ №1:

К сожалению, catplot это интерфейс на уровне фигур, а не интерфейс на уровне осей, поэтому вы не можете построить его таким образом. Это распространенная проблема с другими интерфейсами уровня рисунка , такими как displot , и обходной путь, который я нашел, заключается в использовании базовых компонентов по отдельности (в displot частности, это была kdeplot и гистограмма, поскольку catplot вам придется заглянуть в исходный код).

Вы можете определить, какие интерфейсы находятся на уровне фигур или осей, наблюдая, принимают ли они аргумент ax в своем вызове. В вашем случае вы можете изучить документацию, чтобы узнать, какие графики поддерживаются, а также исходный код для деталей реализации.