Вы можете перебрать массив плоских осей, а также использовать 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()