我有一个pandas.DataFrame
,我想根据两列绘制一个图形:Age
(int),Survived
(int-0
或1
)。现在我有这样的事情:
这是我使用的代码:
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'])
因此,这在两个子图中显示。这很好,但是对于特定的年龄范围,很难看到
0
列中具有1
与Survived
的记录数量之间的差异。所以我想要这样的东西:
在这种情况下,您会看到这种差异。有什么办法可以在
seaborn
上做到这一点(因为在那里我可以轻松地对pandas.DataFrame
进行操作)?如果可能的话,我不想使用 Vanilla matplotlib
最佳答案
只需将总直方图与生存的-0叠加即可。如果没有精确的数据框形式,很难给出确切的功能,但这是一个带有示例数据集的基本示例。
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()