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

绘制预期寿命数据集图表遇问题:需添加死亡、地区及年份信息

你的代码问题出在这
  • 直接绘制Region列完全错误:这列是字符串类型,matplotlib会自动把它转成整数索引乱绘,完全不符合地区维度的展示逻辑
  • 未对数据做地区+年份聚合:直接甩全量原始数据上去,线条和数据点堆在一起必然拥挤重叠
  • 没引入死亡相关数据列,也没有合理的标注逻辑
调整后的代码(解决重叠+展示死亡数据)

下面的代码会按地区展示预期寿命和死亡数据的年度趋势,彻底避免文本拥挤问题:

import pandas as pd
import matplotlib.pyplot as plt

# 读取数据集
df = pd.read_csv("/kaggle/input/life-expectancy-who-updated/Life-Expectancy-Data-Updated.csv")

# 按地区+年份聚合,计算预期寿命和死亡率的均值(用中位数也可以,看需求调整)
agg_df = df.groupby(['Region', 'Year']).agg(
    avg_life_expectancy=('Life_expectancy', 'mean'),
    avg_adult_mortality=('Adult_Mortality', 'mean')  # 假设死亡数据列是Adult_Mortality,不对的话换你数据集里的对应列名
).reset_index()

# 创建大尺寸画布,分两个子图分别展示指标,避免单图拥挤
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 10))

# 第一个子图:绘制各地区预期寿命年度趋势
for region in agg_df['Region'].unique():
    region_data = agg_df[agg_df['Region'] == region]
    ax1.plot(region_data['Year'], region_data['avg_life_expectancy'], label=region)

ax1.set_title('各地区预期寿命年度变化')
ax1.set_ylabel('平均预期寿命')
# 把图例放在画布外部,避免遮挡图表内容
ax1.legend(bbox_to_anchor=(1.05, 1), loc='upper left')

# 第二个子图:绘制各地区死亡率年度趋势
for region in agg_df['Region'].unique():
    region_data = agg_df[agg_df['Region'] == region]
    ax2.plot(region_data['Year'], region_data['avg_adult_mortality'], label=region)

ax2.set_title('各地区成人死亡率年度变化')
ax2.set_xlabel('年份')
ax2.set_ylabel('平均成人死亡率')
ax2.legend(bbox_to_anchor=(1.05, 1), loc='upper left')

# 自动调整子图间距,彻底避免文本重叠
plt.tight_layout()
plt.show()
核心优化点
  • 先聚合数据:把同地区同年份的数据合并成均值,避免原始数据杂乱堆叠
  • 分图展示:用两个子图分开承载预期寿命和死亡数据,避免单图内线条过多拥挤
  • 图例外置:将图例挪到画布右侧外部,彻底解决文本重叠问题
  • 放大画布:设置更大的画布尺寸,提升整体可读性

如果想把两个指标放在同一张图(双Y轴对比),可以用这个版本:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("/kaggle/input/life-expectancy-who-updated/Life-Expectancy-Data-Updated.csv")
agg_df = df.groupby(['Region', 'Year']).agg(
    avg_life_expectancy=('Life_expectancy', 'mean'),
    avg_adult_mortality=('Adult_Mortality', 'mean')
).reset_index()

fig, ax1 = plt.subplots(figsize=(12, 6))

# 左侧Y轴绘制预期寿命,用实线
for region in agg_df['Region'].unique():
    region_data = agg_df[agg_df['Region'] == region]
    ax1.plot(region_data['Year'], region_data['avg_life_expectancy'], label=f'{region} 预期寿命')

ax1.set_title('各地区预期寿命与死亡率年度趋势')
ax1.set_xlabel('年份')
ax1.set_ylabel('平均预期寿命')
ax1.legend(bbox_to_anchor=(1.05, 1), loc='upper left')

# 右侧Y轴绘制死亡率,用虚线区分
ax2 = ax1.twinx()
for region in agg_df['Region'].unique():
    region_data = agg_df[agg_df['Region'] == region]
    ax2.plot(region_data['Year'], region_data['avg_adult_mortality'], linestyle='--', label=f'{region} 死亡率')

ax2.set_ylabel('平均成人死亡率')
ax2.legend(bbox_to_anchor=(1.05, 0.8), loc='upper left')

plt.tight_layout()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:13:09