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

如何使用Python读取CSV文件绘制最高/最低气温与日期对应图表

CSV气温数据绘图问题修正方案

现有代码核心问题梳理

  • 创建了csv.reader对象但未实际使用,循环遍历原始文件对象f只会拿到每行的完整字符串,row[4]取到的是字符串第5位字符,不是CSV第5列的内容
  • 未跳过表头行,第一行是字段名,不属于有效气温数据
  • 读取到的单元格内容默认是字符串类型,气温数据需要转换为整数才能正常绘图
  • 循环中每次覆盖x、y变量,没有存储所有行的数据,最终绘图仅用到最后一行的无效数据
  • 坐标轴映射逻辑错误:日期应为x轴,气温数值应为y轴

修正后完整代码

import csv
import matplotlib.pyplot as plt

filename = 'death_valley_2018_simple.csv'
# 初始化列表存储所有数据
dates = []
max_temps = []
min_temps = []

with open(filename) as f:
    csv_reader = csv.reader(f, delimiter=',')
    line_count = 0
    for row in csv_reader:
        # 跳过表头行
        if line_count == 0:
            line_count += 1
            continue
        # 按索引取对应列,做类型转换
        dates.append(row[2])
        max_temps.append(int(row[4]))
        min_temps.append(int(row[5]))
        # 打印行号和对应数据,满足获取行号的需求
        print(f"行号:{line_count},日期:{row[2]},最高温:{row[4]},最低温:{row[5]}")
        line_count += 1

# 绘制分组柱状图
bar_width = 0.35
x = range(len(dates))
# 最高温柱状图
plt.bar([i - bar_width/2 for i in x], max_temps, width=bar_width, label='最高温')
# 最低温柱状图
plt.bar([i + bar_width/2 for i in x], min_temps, width=bar_width, label='最低温')
# 配置坐标轴
plt.xticks(x, dates, rotation=45)
plt.xlabel('日期')
plt.ylabel('气温(华氏度)')
plt.title('死亡谷2018年1月上旬气温统计')
plt.legend()
# 自动调整布局防止日期标签被截断
plt.tight_layout()
plt.show()

关键逻辑说明

  1. 用三个空列表存储所有行的对应数据,避免单次循环覆盖变量
  2. 遍历csv_reader对象直接获取拆分好的列列表,不需要手动处理CSV分隔符
  3. 行号变量line_count从0开始计数,跳过表头后即可对应有效数据的行号
  4. 分组柱状图通过偏移x轴坐标实现两组柱子并列显示,加图例区分气温类型
  5. 日期标签旋转45度避免重叠,tight_layout()方法自动适配布局

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:54:00