Кажется, проблема в том, что столбцы case и class содержат одну и ту же информацию, но с другим именем. Везде, где регистр равен 1, класс отрицателен, и наоборот.
Если вы используете x
и hue
, seaborn занимает место для 4 столбцов:
- case 1, класс «Отрицательный»
- кейс 1, класс «зеленый»
- кейс 2, класс «Отрицательный»
- кейс 2, класс «зеленый»
Два из четырех столбцов остаются пустыми:
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
df = pd.DataFrame({'case': np.concatenate([np.repeat([1], 3700), np.repeat([2], 1200)]),
'class': np.concatenate([np.repeat(['Negative'], 3700), np.repeat(['green'], 1200)])})
g = sns.catplot(x="case",
hue='class',
palette='Blues',
data=df,
kind="count")
plt.show()
В этом случае более адекватный график будет опущен hue
и непосредственно использовать класс как x
:
g = sns.catplot(x='class',
palette='Blues',
data=df,
kind='count')
plt.show()
PS: чтобы получить легенду, аналогичную первой на сюжете, xticks и xlabel могут быть использованы. Обратите внимание, что морской завод catplot
предназначен для создания полной сетки участков. g.axes[0][0]
захватывает ax
первого подплота.
plt.legend(g.axes[0][0].patches,
[l.get_text() for l in g.axes[0][0].get_xticklabels()],
title= g.axes[0][0].get_xlabel())
g.axes[0][0].set_xticks([]) # remove the xticks (now in legend)
g.axes[0][0].set_xlabel('') # remove the xlabel (now title of legend)