首页 > 解决方案 > Seaborn FacetGrid 包括已删除级别的空列/行

问题描述

我正在使用内置的 Seaborn 数据集菱形基于“切割”和“颜色”建立 FacetGrid。但是,我首先删除了颜色“D”和“E”以及剪切的“Fair”,希望得到一个 5x5 的网格。

我的代码是:

diamonds = sns.load_dataset("diamonds")
diamonds = diamonds[(~diamonds.color.isin(["D","E"])) & (diamonds.cut!="Fair")]
p2 = sns.FacetGrid(diamonds,row="cut",col="color")
p2 = p2.map(plt.scatter,"price","carat")

当我在 Jupyter 笔记本中运行它时,我得到两列“D”和“E”以及“Fair”的一行仍然在网格上,但是与这两列和一行相关的所有方面都是空的。 看图片

我的问题是,如何删除这些空白方面?我不明白 FacetGrid 是如何知道这些级别仍然存在的,因为我在调用 FacetGrid() 方法之前删除了它们。

谢谢!

标签: pandasseabornfacet-grid

解决方案


你最终得到空面的原因是因为“颜色”和“切割”是分类系列。要完全删除这些类别,您可以按照自己的方式对数据进行子集化,然后用 覆盖这些类别列.cat.remove_unused_categories()以删除这些值的任何痕迹。

import seaborn as sns
import matplotlib.pyplot as plt

diamonds = sns.load_dataset("diamonds")

diamonds = diamonds[(~diamonds.color.isin(["D","E"])) & (diamonds.cut!="Fair")]
diamonds["color"] = diamonds["color"].cat.remove_unused_categories()
diamonds["cut"] = diamonds["cut"].cat.remove_unused_categories()

p2 = sns.FacetGrid(diamonds, row="cut", col="color")
p2.map_dataframe(plt.scatter, "price", "carat")

推荐阅读