我正在尝试对DF中“类别”列中出现的每个类别进行seaborn绘制。有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()
答案 0 :(得分:1)
您可以在展平的坐标轴数组上循环,也可以使用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()