Python基于奥运选手DataFrame绘制历年女性参赛人数趋势图受阻
代码错误原因定位
- 直接使用布尔判断结果
z = df['Sex'] == 'F'作为绘图y轴,该序列对应每一条原始参赛记录的性别判断结果,值只有0(非女)/1(女),完全没有按年份汇总同一年的女性参赛总人数,最终绘制的是逐行记录的零散点位,和预期的逐年规模趋势完全不符 - 缺失核心的分组聚合步骤:没有将散落在不同行的同一年参赛记录做汇总统计,数据维度和绘图要求不匹配
- 注释掉的备用绘图代码存在多处问题:写的x轴列名是
Years,和数据集实际列名Year不一致;同时选用直方图kind='hist'也不适合展示时间维度的连续变化趋势
可直接运行的修正实现
核心实现逻辑
- 从原始数据中筛选所有女性参赛的记录
- 按参赛年份做分组,统计每个年份对应的女性参赛总规模
- 将聚合完成的「年份-人数」对应关系传入绘图函数
基于Matplotlib的静态趋势图代码
import pandas as pd import matplotlib.pyplot as plt import matplotlib as mpl # 配置参数避免大数据量绘图卡顿 mpl.rcParams['agg.path.chunksize'] = 10000 # 加载本地数据集 df = pd.read_csv("athlete_events.csv") # 按年份统计女性参赛规模 # 若需要统计当年独立的女性运动员数(而非含项目重复的参赛记录数),可将.size()替换为['Name'].nunique() female_year_stats = df[df['Sex'] == 'F'].groupby('Year', as_index=False).size() female_year_stats = female_year_stats.rename(columns={'size': 'FemaleCount'}) # 绘制趋势图 plt.plot( female_year_stats['Year'], female_year_stats['FemaleCount'], color='red', marker='o' ) plt.xlabel('参赛年份', fontsize=14) plt.ylabel('当年女性参赛人数', fontsize=14) plt.grid(True) plt.show()
基于已导入Plotly的交互图实现
如果需要可缩放、悬浮查看具体数值的交互图,可以直接复用前面已经聚合好的统计结果:
import plotly.express as px fig = px.line( female_year_stats, x='Year', y='FemaleCount', title='历届奥运会女性参赛人数变化趋势', markers=True ) fig.show()
内容的提问来源于stack exchange,提问作者Santiago Ramirez
相关产品推荐
相关产品推荐

