sns.catplot, закрывающий промежуток между барами - PullRequest
0 голосов
/ 22 апреля 2020

Это график, который я получаю, когда запускаю этот код. Можно ли как-нибудь уменьшить разрыв между этими двумя столбцами, но не полностью касаясь друг друга ??

sns.catplot(x = "case", kind = "count", data = df, alpha=0.8, palette = my_pal, hue="class")
plt.ylabel("Count", size=12)
plt.tight_layout()

enter image description here

1 Ответ

1 голос
/ 22 апреля 2020

Кажется, проблема в том, что столбцы 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()

demo plot

В этом случае более адекватный график будет опущен hue и непосредственно использовать класс как x:

g = sns.catplot(x='class',
                palette='Blues',
                data=df,
                kind='count')
plt.show()

plot without hue

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