seaborn boxplot的子图

Edw*_*ard 21 loops boxplot python-3.x seaborn

我有这样的数据帧

import seaborn as sns
import pandas as pd
%pylab inline
df = pd.DataFrame({'a' :['one','one','two','two','one','two','one','one','one','two'], 'b': [1,2,1,2,1,2,1,2,1,1], 'c': [1,2,3,4,6,1,2,3,4,6]})
Run Code Online (Sandbox Code Playgroud)

单个箱图是可以的

sns.boxplot(  y="b", x= "a", data=df,  orient='v' )
Run Code Online (Sandbox Code Playgroud)

但我想为所有变量构建一个子图.我做

names = ['b', 'c']
plt.subplots(1,2)
sub = []
for name in names:

    ax = sns.boxplot(  y=name, x= "a", data=df,  orient='v' )
    sub.append(ax)
Run Code Online (Sandbox Code Playgroud)

我明白了

在此输入图像描述

怎么解决?thanx的帮助

Luc*_*cas 41

我们用子图创建图:

f, axes = plt.subplots(1, 2)
Run Code Online (Sandbox Code Playgroud)

其中axis是每个子图的数组.

然后我们用参数告诉每个图我们想要它们的子图ax.

sns.boxplot(  y="b", x= "a", data=df,  orient='v' , ax=axes[0])
sns.boxplot(  y="c", x= "a", data=df,  orient='v' , ax=axes[1])
Run Code Online (Sandbox Code Playgroud)

结果是:

在此输入图像描述


uke*_*emi 10

如果您希望迭代多个不同的子图,请使用plt.subplots

import matplotlib.pyplot as plt

# Creating subplot axes
fig, axes = plt.subplots(nrows,ncols)

# Iterating through axes and names
for name, ax in zip(names, axes.flatten()):
    sns.boxplot(y=name, x= "a", data=df, orient='v', ax=ax)
Run Code Online (Sandbox Code Playgroud)

工作示例:

import numpy as np

# example data
df = pd.DataFrame({'a' :['one','one','two','two','one','two','one','one','one','two'], 
                   'b': np.random.randint(1,8,10), 
                   'c': np.random.randint(1,8,10),
                   'd': np.random.randint(1,8,10),
                   'e': np.random.randint(1,8,10)})

names = df.columns.drop('a')
ncols = len(names)
fig, axes = plt.subplots(1,ncols)

for name, ax in zip(names, axes.flatten()):
    sns.boxplot(y=name, x= "a", data=df, orient='v', ax=ax)
    
plt.tight_layout()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述