如何在seaborn中调整子图的大小?

12
%matplotlib inline
fig, axes = plt.subplots(nrows=2, ncols=4)
m = 0
l = 0
for i in k: 
    if l == 4 and m==0:
        m+=1
        l = 0
    data1[i].plot(kind = 'box', ax=axes[m,l], figsize = (12,5))
    l+=1

这将根据需求输出子图。

Pandas Boxplots

但是,当尝试通过seaborn实现时,子图会堆叠在一起,如何更改每个子图的大小?

fig, axes = plt.subplots(nrows=2, ncols=4)
m = 0
l = 0
plt.figure(figsize=(12,5))
for i in k: 
    if l == 4 and m==0:
        m+=1
        l = 0
    sns.boxplot(x= data1[i],  orient='v' , ax=axes[m,l])
    l+=1

Seaborn箱线图


1
我的点赞表示我同意那看起来很糟糕,我不知道如何修复它,我想看看是否有人能够处理。 - piRSquared
1个回答

21
您对plt.figure(figsize = (12,5))的调用创建了一个新的空图,与您在第一步中已经声明的fig不同。请在对plt.subplots的调用中设置figsize。由于您没有设置它,默认情况下它会在您的绘图中设为(6,4)。您已经创建了您的图形并将其分配给变量fig。如果您想要对该图进行操作,应该使用fig.set_size_inches(12,5)来更改大小。

然后您可以简单地调用fig.tight_layout()来使绘图适配得很好。

此外,通过在axes对象数组上使用flatten,有一种更容易的方式来迭代遍历这些轴。我还直接使用了 seaborn 中的数据。

# I first grab some data from seaborn and make an extra column so that there
# are exactly 8 columns for our 8 axes
data = sns.load_dataset('car_crashes')
data = data.drop('abbrev', axis=1)
data['total2'] = data['total'] * 2

# Set figsize here
fig, axes = plt.subplots(nrows=2, ncols=4, figsize=(12,5))

# if you didn't set the figsize above you can do the following
# fig.set_size_inches(12, 5)

# flatten axes for easy iterating
for i, ax in enumerate(axes.flatten()):
    sns.boxplot(x= data.iloc[:, i],  orient='v' , ax=ax)

fig.tight_layout()

在此输入图片描述

如果没有使用tight_layout,图表会稍微挤在一起。请参见下面的示例。

在此输入图片描述


如何进行2*2子图绘制,以便每个axs有两个箱线图? - mLstudent33

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接