Python绘制CO₂随时间变化曲线及年度均值计算问题求助
CO₂数据可视化任务解决方案
问题分析
原代码存在以下问题:
- 仅将年份作为日期浮点数存储,导致每年12个月度数据点在X轴上重叠
- 未计算并绘制年度平均CO₂浓度
- 缺少轴标题、图例等可视化优化项
解决方案步骤
1. 修复日期表示
将每个月份转换为分数年份,公式为:年份 + (月份-1)/12,确保每个月度数据点在X轴上有唯一且均匀分布的位置。
2. 读取并处理数据
解析CSV中的年份、月份和CO₂浓度,计算分数日期并存储数据,同时累积年度数据用于后续平均计算。
3. 计算年度平均CO₂浓度
按年份分组,累加每个年份的CO₂总和与数据点数量,计算年度平均值。
4. 可视化优化
绘制月度数据曲线和年度平均曲线,添加轴标题、图例、网格等元素提升可读性。
完整代码
import matplotlib.pyplot as plt import csv from collections import defaultdict # 初始化数据存储结构 月度日期 = [] 月度CO₂ = [] 年度累计数据 = defaultdict(lambda: {'总和': 0, '数量': 0}) # 读取并处理CSV数据 with open('co2_data.csv', 'r') as csv文件: 数据读取器 = csv.reader(csv文件, delimiter=',') # 若CSV包含表头,取消下一行注释以跳过 # next(数据读取器) for 行 in 数据读取器: 年份 = int(行[0]) 月份 = int(行[1]) CO₂浓度 = float(行[2]) # 计算分数年份 分数日期 = 年份 + (月份 - 1)/12 月度日期.append(分数日期) 月度CO₂.append(CO₂浓度) # 累积年度数据 年度累计数据[年份]['总和'] += CO₂浓度 年度累计数据[年份]['数量'] += 1 # 计算年度平均值 年度年份 = [] 年度平均值 = [] for 年份 in sorted(年度累计数据.keys()): 平均CO₂ = 年度累计数据[年份]['总和'] / 年度累计数据[年份]['数量'] 年度年份.append(年份) 年度平均值.append(平均CO₂) # 创建可视化图表 plt.figure(figsize=(12, 6)) # 绘制月度CO₂曲线 plt.plot(月度日期, 月度CO₂, 'b-', label='月度CO₂浓度', alpha=0.7) # 绘制年度平均CO₂曲线 plt.plot(年度年份, 年度平均值, 'ro-', label='年度平均CO₂浓度', linewidth=2) # 添加轴标题与图表标题 plt.xlabel('年份', fontsize=12) plt.ylabel('CO₂浓度 (ppm)', fontsize=12) plt.title('1960-2022年NASA月度与年度平均CO₂浓度变化', fontsize=14) # 添加图例与网格 plt.legend(fontsize=10) plt.grid(True, linestyle='--', alpha=0.5) # 显示图表 plt.show()
代码说明
- 分数年份转换:例如1960年1月为1960.0,12月为1960.9167,彻底解决数据点重叠问题
- 年度平均计算:通过字典累积每个年份的CO₂总和与数据量,确保计算准确
- 可视化区分:用蓝色线条表示月度数据,红色带标记的线条表示年度平均值,对比清晰
- 可读性优化:添加网格、标题、图例,提升图表信息传递效率
内容的提问来源于stack exchange,提问作者Jack Robinson
相关产品推荐
相关产品推荐

