Seaborn stacked histogram/barplot
我有一个
这是我使用的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 2 3 4 5 6 | 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() |
从seaborn 0.11.0开始,您可以执行此操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # stacked histogram import matplotlib.pyplot as plt f = plt.figure(figsize=(7,5)) ax = f.add_subplot(1,1,1) # mock your data frame import pandas as pd import numpy as np _df = pd.DataFrame({ "age":np.random.normal(30,30,1000), "survived":np.random.randint(0,2,1000) }) # plot import seaborn as sns sns.histplot(data=_df, ax=ax, stat="count", multiple="stack", x="age", kde=False, palette="pastel", hue="survived", element="bars", legend=True) ax.set_title("Seaborn Stacked Histogram") ax.set_xlabel("Age") ax.set_ylabel("Count") |