python - 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()
解决方案
- 选择独特的城镇并绘制它们
- 直方图不是正确的绘图类型。这些是分类的
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')
推荐阅读
- python - 将预先存在的 matplotlib 图制作成 2x2 子图
- python-3.x - 使用 Python 获取远程计算机上运行的服务的状态
- android - Java Android Studio - 使用 Android 10 的物理设备上出现无法解析的日期错误
- sql - Powershell 的 StringBuilder 性能不佳?
- python - 获取与在 Python 中动态运行的脚本一起使用的对象列表
- laravel - I want to create this query with Eloquent model
- git - 恢复分支之一后如何解决合并冲突
- groovy - 如何正确在 Groovy 中进行多线程处理
- javascript - Heroku SyntaxError:意外的令牌“导出”
- php - 编码 PHP 脚本以将 CSV 映射到 XML