回答问题

我有一个pandas.DataFrame,我想绘制一个基于两列的图表:Age(int)、Survived(int -01)。现在我有这样的事情:

在此处输入图像描述

这是我使用的代码:

class DataAnalyzer:

    def _facet_grid(self, func, x: List[str], col: str = None, row: str = None) -> None:
        g = sns.FacetGrid(self.train_data, col=col, row=row)
        if func == sns.barplot:
            g.map(func, *x, ci=None)
        else:
            g.map(func, *x)
        g.add_legend()
        plt.show()

    def analyze(self) -> None:
        # Check if survival rate is connected with Age
        self._facet_grid(plt.hist, col='Survived', x=['Age'])

所以这显示在两个子图上。这很好,但是对于特定的年龄范围,很难看到Survived列中具有01的记录数量之间的差异。

所以我想要这样的东西:

在此处输入图像描述

在这种情况下,您可以看到这种差异。有没有办法在seaborn上做(因为我可以很容易地在pandas.DataFrame上操作)?如果可能的话,我不想使用香草matplotlib

Answers

只需将总直方图与幸存的 -0 堆叠起来。如果没有数据框的精确形式,很难给出确切的功能,但这里有一个带有 seaborn 示例数据集的基本示例。

import matplotlib.pyplot as plt 
import seaborn as sns 
tips = sns.load_dataset("tips") 
sns.distplot(tips.total_bill, color="gold", kde=False, hist_kws={"alpha": 1}) 
sns.distplot(tips[tips.sex == "Female"].total_bill, color="blue", kde=False, hist_kws={"alpha":1}) 
plt.show()
Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐