如何并排绘制来自两个不同数据帧的计数图?

时间:2021-02-07 18:58:12

标签: seaborn jmathplot

我有一个具有相同分类列的训练数据集和测试数据集。目前,我枚举每个数据集的分类列,为每个数据集生成两组 countplot 子图,如下所示:

plt.figure(figsize=(20,20))
for i, col in enumerate(cat_features):
    plt.subplot(5,2,i+1)
    sns.countplot(x=col,data=train, order=('A','B','C','D','E','F','G','H','I','J','K','L','N'))
plt.tight_layout()

which produces a nice figure like this (note for sake of space I cropped to show the first four):

我想做的事情是测试和训练之间的并排比较;一组子图,其中 Cat0 Train 的 catplot 与 Cat0 Test 并排,然后 Cat1 Train 的 subplot catplot 位于 Cat1 Test 旁边,等等。

训练数据看起来像(小子集)

cat0    cat1    cat2    cat3    cat4    cat5    cat6    cat7    cat8    
                                    
    A    B       A      A       B       D       A       E       C   
    B    A       A      A       B       B       A       E       A   
    A    A       A      C       B       D       A       B       C   
    A    A       A      C       B       D       A       E       G   
    A    B       A      A       B       B       A       E       C   

训练数据

cat0    cat1    cat2    cat3    cat4    cat5    cat6    cat7    cat8
                            
A       B       A       C       B       D       A       E       E
A       B       A       C       B       D       A       E       C
A       B       A       C       B       D       A       E       C
A       A       B       A       B       D       A       E       E
A       B       A       A       B       B       A       E       E

1 个答案:

答案 0 :(得分:0)

没有一些示例数据很难知道,但您可以创建如下四个图,然后循环遍历它们和所需的数据集顺序,绘制到相关轴。

import matplotlib.pyplot as plt
import seaborn as sns

fig, axes = plt.subplots(ncols=2, nrows=2)

for ax, dataset in zip(axes.flatten(), [train, test, train, test]):
    sns.countplot(
      data = dataset,
      x=cat_features,
      order = ('A','B','C','D','E','F','G','H','I','J','K','L','N'),
      ax=ax)
    
plt.show()