问题描述
我正在使用内置的Seaborn数据集钻石基于'cut'和'color'建立FacetGrid。但是,我首先要删除颜色“ D”和“ E”以及剪切的“公平”,以期产生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()方法之前已将它们删除。
谢谢!
解决方法
之所以以空面作为结束,是因为“颜色”和“切割”是分类序列。要完全删除这些类别,您可以按需分配数据的子集,然后用.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")