首页 > 解决方案 > Pandas 系列直方图 - 如何使子图显示在单独的图表上?

问题描述

我正在 Kaggle 上尝试 Titanic ML 竞赛,并想尝试在两个单独的直方图上绘制两条单独信息的直方图。但是,下面的代码将所有内容绘制在一个直方图上,如下图所示(蓝色为 cb,橙色为 qt)。

作为参考,cb 和 qt 的数据类型是 matplotlib.axes._subplots.AxesSubplot。

有没有办法让 cb 和 qt 出现在两个单独的直方图上?先感谢您!

cb = cherbourg.loc[cherbourg.Survived == 1].Pclass.hist()
cb.set_xlabel('Pclass')
cb.set_ylabel('No. Survivors')
cb.set_title('Number of Survivors From Cherbourg By SES')

qt = queenstown.loc[queenstown.Survived == 1].Pclass.hist()

在此处输入图像描述

标签: pythonpandasdata-science

解决方案


  • 选择独特的城镇并绘制它们
  • 直方图不是正确的绘图类型。这些是分类的value_counts
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# load the dataframe
df = sns.load_dataset('titanic')

# set the column to a Categorical type: optional
df.pclass = pd.Categorical(df.pclass, categories=[1, 2, 3], ordered=True)

# plot
for town in df.embark_town.unique():
    data = df[(df.embark_town == town) & df.survived == 1]
    if not data.empty:
        plt.figure(figsize=(6, 3))
        data.pclass.value_counts(sort=False).plot(kind='bar')
        plt.xlabel('Pclass')
        plt.ylabel('No. Survivors')
        plt.title(f'Number of Survivors From {town}')

在此处输入图像描述

seaborn.FacetGrid

  • 指定row='embark_town'而不是col='embark_town'拥有一列图
  • 使用seaborn.countplot
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# select data
df = sns.load_dataset('titanic')
data = df[df.survived == 1]

# plot
g = sns.FacetGrid(data, col='embark_town', height=5)
g.map(sns.countplot, 'pclass', order=[1, 2, 3])
g.set_axis_labels(x_var='Pclass', y_var='No. Survivors')

在此处输入图像描述


推荐阅读