打开csv文件,并使用matplotlib绘制时间趋势图

        使用Matplotlib根据下载的数据创建一个图表,展示两个不同地区的温度变化:阿拉斯加州锡特卡和加利福尼亚州死亡谷。

一、总体代码

import csv
from datetime import datetime
import matplotlib.pyplot as plt

# 导入数据文件
filename1 = 'chap16/sitka_weather_2021_full.csv'
filename2 = 'chap16/death_valley_2021_full.csv'
with open(filename1) as f:
    reader = csv.reader(f)
    header_row = next(reader)
    print(header_row)


    # 确定列索引 
    for index,column_header in enumerate(header_row):
        print(index,column_header)     

    # 从文件中提取日期、温度PRCP
    dates, tmaxs ,tmins = [], [], []
    for row in reader:
        date = datetime.strptime(row[2],'%Y-%m-%d')
        try:
            tmax = int(row[7])
            tmin = int(row[8])
        except ValueError:
            print(f'{date}数据缺失!')
        else:
            tmaxs.append(tmax)
            tmins.append(tmin)
            dates.append(date)

# 绘制图形
plt.style.use('seaborn-v0_8')
fig, ax = plt.subplots()
ax.plot(dates, tmaxs, c='red',alpha=0.5)
ax.plot(dates, tmins, c='blue',alpha=0.5 )  # alpha 代表颜色
ax.fill_between(dates,tmaxs,tmins,facecolor='blue',alpha=0.1)

# 设置标签
ax.set_title('2021年温度',fontsize=24) 
fig.autofmt_xdate()
ax.set_ylabel('temperature(F)')
ax.set_ylim(0, 110)
ax.tick_params(axis='both', labelcolor='b',labelsize='medium', width=3)

plt.show()

        实现效果:

二、分部分说明

0、调用并读取文件、提取数据.

      ①模块csv 包含函数next() ,调用它并传入阅读器对象时,它将返回文件中的下一行。只调用了next() 一次,则得到文件第一行的列名。

      ②遍历文件中余下的各行:for row in reader:

with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader)
    print(header_row)


    # 确定列索引 
    for index,column_header in enumerate(header_row):
        print(index,column_header)     

    # 从文件中提取日期、温度
    dates, tmaxs ,tmins = [], [], []
    for row in reader:
        date = datetime.strptime(row[2],'%Y-%m-%d')
        try:
            tmax = int(row[7])
            tmin = int(row[8])
        except ValueError:
            print(f'{date}数据缺失!')
        else:
            tmaxs.append(tmax)
            tmins.append(tmin)
            dates.append(date)

1、绘制图形。

        subplots函数可在一张图片中绘制一个或多个图表。变量fig 表示整张图片。变量ax表示图片中的各个图表。ax.plot代表绘制图标,调用两次代表在fig上绘制两张。


# 绘制图形
plt.style.use('seaborn-v0_8')
fig, ax = plt.subplots()

# 可以在一张图上绘制两条折线

ax.plot(dates, tmaxs, c='red',alpha=0.5)
ax.plot(dates, tmins, c='blue',alpha=0.5 )  # alpha 代表颜色

# 在两条线中填充
ax.fill_between(dates,tmaxs,tmins,facecolor='blue',alpha=0.1)

2、设置标签:使用ax.set_***命令。

ax.set_title('2017年每日降水量',fontsize=24) 
ax.set_xlabel('')
fig.autofmt_xdate()  // 设置倾斜
ax.set_ylabel('降水量(mm)')
ax.set_ylim(0, 2.5)  //设置固定y刻度

4、更改刻度、刻度标签和网格线的外观:包括axis(应用参数的轴),labelcolor(标签颜色),labelsize(标签字体大小)。

ax.tick_params(axis='both', labelcolor='b',labelsize='medium', width=3)

附录:

0、必须把当前的图关掉才能继续画图。
1、使用with打开文件,并且将其内容存储为reader变量后,后续的操作需要在with底下(即缩进)
with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader)
    print(header_row)

    # 从文件中提取日期、每日降水量PRCP
    dates, PRCPs = [], []
    for row in reader:
        PRCP = float(row[5])
        date = datetime.strptime(row[2],'%Y-%m-%d')
        PRCPs.append(PRCP)
        dates.append(date)

2、index()方法返回列表中特定元素的索引。

# 例如
animals = ['cat', 'dog', 'mouse', 'elephant'] 
animals.index('dog')

# 定义
date_index = header_row.index('DATE') 
high_index = header_row.index('TMAX') 
low_index = header_row.index('TMIN') 
name_index = header_row.index('NAME')
3、try-except代码块:即便出现异常,程序也将继续运行:显示你编写的友好的错误消息,而不是令用户迷惑的traceback。例如以下代码:当第二个数为0时,输出提示性信息,并且再次循环运行程序。
        也可以使用continue 来跳过一些数据,或者使用remove() 或del 将已提取的数据删除。

学习参考:

《Python编程:从入门到实践(第2版)》 ([美]埃里克·马瑟斯(Eric Matthes)) 

章节:16.1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值