You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中绘制男女两组独立图表?附现有代码求助

修正后的代码及问题说明

先梳理下你代码里的几个核心问题:

  • 错误使用了df(x="Age", y="Sex")这种语法,Pandas DataFrame不能这么调用,得先筛选出对应性别的数据
  • plt.plot更适合折线图,展示乘客年龄分布用直方图(plt.hist)或者柱状图会更直观
  • 标签设置有误,子图的ylabel应该代表乘客数量,性别已经通过子图标题区分开了
  • 泰坦尼克号的Age字段存在缺失值,得先清理掉这些无效数据才能得到准确的统计结果

下面是修正后的完整代码,能正确生成男女两组独立的年龄分布图表:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# 读取数据并清理Age缺失值
df = pd.read_csv("titanic.csv")
df_clean = df.dropna(subset=["Age"])  # 移除Age为空的记录

# 分别筛选男女乘客的年龄数据
male_ages = df_clean[df_clean["Sex"] == "male"]["Age"]
female_ages = df_clean[df_clean["Sex"] == "female"]["Age"]

# 设置画布与子图布局
plt.figure(figsize=(12, 5))

# 第一个子图:男性乘客年龄分布
plt.subplot(1, 2, 1)
plt.hist(male_ages, bins=10, color='purple', edgecolor='black')
plt.xlabel('Age')
plt.ylabel('Number of Passengers')
plt.title('Male Passengers by Age')

# 第二个子图:女性乘客年龄分布
plt.subplot(1, 2, 2)
plt.hist(female_ages, bins=10, color='green', edgecolor='black')
plt.xlabel('Age')
plt.ylabel('Number of Passengers')
plt.title('Female Passengers by Age')

# 调整子图间距,避免标签重叠
plt.tight_layout()
plt.show()

额外扩展:

如果想要更规整的年龄分组(比如按10岁区间划分),可以手动定义分组区间,比如bins=[0,10,20,30,40,50,60,70,80]替换代码里的bins=10即可。
要是你确实想用折线图展示年龄分组后的人数趋势,可以先统计分组人数再绘图:

# 示例:按年龄分组统计后绘制折线图
male_binned = pd.cut(male_ages, bins=10).value_counts().sort_index()
female_binned = pd.cut(female_ages, bins=10).value_counts().sort_index()

plt.subplot(1,2,1)
plt.plot(male_binned.index.astype(str), male_binned.values, color='purple')
plt.xticks(rotation=45)  # 旋转x轴标签避免重叠
# 后续标签、标题设置和之前的逻辑一致

内容的提问来源于stack exchange,提问作者Chuong Vo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:34:42