dab*_*ues 5 python matplotlib pandas seaborn
我有一个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'])
Run Code Online (Sandbox Code Playgroud)
因此,这在两个子图中显示。这是好事,但它很难看到的具有记录的金额之间的差额0VS 1在Survived列,对于特定的年龄范围。
所以我想要这样的东西:
在这种情况下,您会看到这种差异。是否有某种方法可以做到seaborn(因为我可以很容易地对其进行操作pandas.DataFrame)?matplotlib如果可能的话,我不想使用香草
Gen*_*sev 15
从seaborn 0.11.0开始,你可以这样做
# 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")
Run Code Online (Sandbox Code Playgroud)
小智 5
只需将总直方图与幸存的 -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()
Run Code Online (Sandbox Code Playgroud)