Pandas 通过数据帧循环堆叠Seaborn Catplot

Pandas 通过数据帧循环堆叠Seaborn Catplot,pandas,matplotlib,seaborn,enumerate,catplot,Pandas,Matplotlib,Seaborn,Enumerate,Catplot,我有多个数据帧,包括三个主要列:1)类别(c1、c2、c3),一个包括数据值,另一个包括不同的时间段(AA、BB、CC、DD) 我试图生成的是一次在一个图中为所有dataframe生成数据的箱线图! 我尝试了不同的枚举选项和“ax”参数,但它仍然单独生成箱线图,我无法理解 allCN=[df1, df2, df3] fig, axs = plt.subplots(nrows = 3, ncols=4, figsize = (30,54)) axes = axes.flatten() for i

我有多个数据帧,包括三个主要列:1)类别(c1、c2、c3),一个包括数据值,另一个包括不同的时间段(AA、BB、CC、DD)

我试图生成的是一次在一个图中为所有dataframe生成数据的箱线图! 我尝试了不同的枚举选项和“ax”参数,但它仍然单独生成箱线图,我无法理解

allCN=[df1, df2, df3]
fig, axs = plt.subplots(nrows = 3, ncols=4, figsize = (30,54))
axes = axes.flatten()

for i, x in enumerate(allCN):

    sns.set(style="ticks", palette='Set2')
    sns.set_context("paper", font_scale=1.1, rc={"lines.linewidth": 1.1})

    g=sns.catplot(x="Cat", y="Data", ax=axs[i,0],
                   col="Period", data=x, kind="box", height=4, aspect=10/18,
                     width=0.6,fliersize=2.5,showfliers=False, linewidth=1.1,
                     notch=False,orient="v"))
    g.set_ylabels("test", size=12)
    g.set_xlabels("")

中的色调参数如何?这会给你你想要的结果吗


中的色调参数如何?这会给你你想要的结果吗


一种方法是堆叠数据帧,并在
catplot
中使用
row=
参数。首先要创建类似于您的数据的内容:

import pandas as pd
import numpy as np
import seaborn as sns

df1 = pd.DataFrame({'Cat':np.random.choice(['C1','C2','C3'],50),
                    'Data':np.random.uniform(0,1,50),"Period":np.random.choice(['AA','CC','DD'],50)})

df2 = pd.DataFrame({'Cat':np.random.choice(['C1','C2','C3'],50),
                    'Data':np.random.uniform(0,1,50),"Period":np.random.choice(['AA','CC','DD'],50)})

df3 = pd.DataFrame({'Cat':np.random.choice(['C1','C2','C3'],50),
                    'Data':np.random.uniform(0,1,50),"Period":np.random.choice(['AA','CC','DD'],50)})
然后连接数据帧并添加另一列(我使用了下面的源代码)来注释数据帧:

allCN=pd.concat([df1,df2,df3])
allCN['source'] = np.repeat(['df1','df2','df3'],[len(df1),len(df2),len(df3)])

sns.catplot(x="Cat", y="Data",
            col="Period", row = "source", 
            data=allCN, kind="box", height=2,aspect=1.6)

一种方法是堆叠数据帧,并在
catplot
中使用
row=
参数。首先要创建类似于您的数据的内容:

import pandas as pd
import numpy as np
import seaborn as sns

df1 = pd.DataFrame({'Cat':np.random.choice(['C1','C2','C3'],50),
                    'Data':np.random.uniform(0,1,50),"Period":np.random.choice(['AA','CC','DD'],50)})

df2 = pd.DataFrame({'Cat':np.random.choice(['C1','C2','C3'],50),
                    'Data':np.random.uniform(0,1,50),"Period":np.random.choice(['AA','CC','DD'],50)})

df3 = pd.DataFrame({'Cat':np.random.choice(['C1','C2','C3'],50),
                    'Data':np.random.uniform(0,1,50),"Period":np.random.choice(['AA','CC','DD'],50)})
然后连接数据帧并添加另一列(我使用了下面的源代码)来注释数据帧:

allCN=pd.concat([df1,df2,df3])
allCN['source'] = np.repeat(['df1','df2','df3'],[len(df1),len(df2),len(df3)])

sns.catplot(x="Cat", y="Data",
            col="Period", row = "source", 
            data=allCN, kind="box", height=2,aspect=1.6)

谢谢你的建议,是的,使用“色调”参数是表达它的另一种方式谢谢你的建议,是的,使用“色调”参数是表达它的另一种方式谢谢,这很有效!有没有像Mathplotlib那样减少“h空间或w空间”的方法?谢谢,这很有效!是否有任何方法可以像Mathplotlib那样减少“h空间或w空间”?