Организация барплотов из моря в массиве - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь составить сюжет в seaborn для каждой категории, которая встречается в столбце «Категория» в моем df.Есть 7 уникальных категорий.Мне удалось сделать это в один ряд, но сюжеты слишком маленькие.Я хотел бы поместить их в два ряда (4 в первом и 3 в семи).Как мне изменить код, кроме того, что я должен изменить аргументы подзаговоров на (2,4)?

fig, ax = plt.subplots(1, 7)

for i,g in enumerate(df.Category.unique()):
    dfx = df[df['Category'] == g]
    sns.set(style="whitegrid", rc={'figure.figsize':(28,6)})
    sns.barplot(x = dfx['Month'], y = dfx['measure'], ci = None, label = g, ax=ax[i])
    ax[i].legend(loc = 'lower center')

plt.tight_layout()
plt.show()

1 Ответ

0 голосов
/ 25 ноября 2018

Вы можете перебрать массив плоских осей, а также использовать groupby для упрощения вещей.Поэтому я бы сказал, что код может выглядеть следующим образом (непроверенный, потому что в вопросе нет данных):

sns.set(style="whitegrid")

fig, axes = plt.subplots(2, 4)

for (n, dfx), ax in zip(df.groupby("Category"), axes.flat):
    sns.barplot(x = dfx['Month'], y = dfx['measure'], ci = None, label = n, ax=ax)
    ax.legend(loc = 'lower center')

axes[1,3].axis("off")
plt.tight_layout()
plt.show()

Кроме того, поскольку вы, кажется, используете seaborn, вы можете рассмотреть seaborn.FacetGrid.Это может выглядеть как

sns.set(style="whitegrid")
g = sns.FacetGrid(data=df, col = "Category", col_wrap=4)
g.map(sns.barplot, "Month", "measure")
plt.tight_layout()
plt.show()
...