Seaborn FacetGrid 包括已删除级别的空列/行

Posted

技术标签:

【中文标题】Seaborn FacetGrid 包括已删除级别的空列/行【英文标题】:Seaborn FacetGrid including empty columns/rows for removed levels 【发布时间】:2021-02-06 04:23:50 【问题描述】:

我正在使用内置的 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”仍然在网格上,但与这两列和一行相关的所有方面都是空的。 See image

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

谢谢!

【问题讨论】:

【参考方案1】:

您最终得到空面的原因是因为“颜色”和“切割”是分类系列。要完全删除这些类别,您可以按照自己的方式对数据进行子集化,然后使用 .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")

【讨论】:

以上是关于Seaborn FacetGrid 包括已删除级别的空列/行的主要内容,如果未能解决你的问题,请参考以下文章

seaborn使用FacetGrid函数可视化山脊图(Ridgeline Plot with Seaborn)

Seaborn displot 'FacetGrid' 对象不可调用

如何使用 Seaborn 创建 FacetGrid 堆叠条形图?

如何在 seaborn 的 facetgrid 中设置可读的 xticks?

在 seaborn 中的特定位置画一条线/注释 Facetgrid

如何使用 seaborn FacetGrid 更改字体大小?