首页 > 解决方案 > sns 中的 catplot 显示实际上不存在的交叉点

问题描述

我正在尝试在 sns 中创建一个 catplot,示例数据位于 https://drive.google.com/file/d/1Lq3KH6Mj1WVPNA4ByJwtFQd4ovLd4lgi/view?usp=sharing下面

当我使用下面的来生成情节时

fig=sns.catplot(data=df, x = 'SubCategory', hue='filedate',col='Category',kind='count')

我得到下面的情节。

在此处输入图像描述

为什么像“G”这样的子类别只在类别 1 和类别 2 中,而它只在类别 3 中。另外,我怎样才能把那些在各自类别中的子类别而不是所有子类别都显示在所有类别中

标签: pythonmatplotlibseaborn

解决方案


不要认为可以删除 count = 0 的类别,您可以尝试定义一个自定义函数并调用 Catplot 使用的 FacetGrid :

import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt

df = pd.read_csv("./Downloads/zrr2weeks.csv")

def bplot(x,y,**kwargs):
    sns.countplot(x,hue=y,**kwargs)
g = sns.FacetGrid(df,col='Category',sharex=False)
g.map(bplot,'SubCategory','filedate')

在此处输入图像描述

您可以在第 8 类中看到有两个 G,即“G”和“G”。不太确定这是否是有意的。如果不:

df.SubCategory = df.SubCategory.str.replace(" ","")
g = sns.FacetGrid(df,col='Category',sharex=False)
g.map(bplot,'SubCategory','filedate')

在此处输入图像描述


推荐阅读