打开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

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的示例代码,演示如何导入csv文件数据并使用matplotlib绘制趋势。 ```python import csv import matplotlib.pyplot as plt # 从csv文件中读取数据 filename = 'data.csv' with open(filename) as f: reader = csv.reader(f) header_row = next(reader) dates, highs, lows = [], [], [] for row in reader: current_date = row[0] high = int(row[1]) low = int(row[2]) dates.append(current_date) highs.append(high) lows.append(low) # 绘制趋势 fig = plt.figure(dpi=128, figsize=(10, 6)) plt.plot(dates, highs, c='red', alpha=0.5) plt.plot(dates, lows, c='blue', alpha=0.5) plt.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1) # 设置形格式 plt.title("Daily high and low temperatures - 2020\nSan Francisco, CA", fontsize=20) plt.xlabel('', fontsize=16) fig.autofmt_xdate() plt.ylabel("Temperature (F)", fontsize=16) plt.tick_params(axis='both', which='major', labelsize=16) plt.show() ``` 在这个示例中,我们首先使用csv模块从一个名为"data.csv"的csv文件中读取数据。然后,我们将日期、最高温度和最低温度分别存储在列表dates、highs和lows中。 接下来,我们使用matplotlib绘制趋势。我们使用plot()函数绘制最高和最低温度的线条,并使用fill_between()函数填充它们之间的区域。我们也设置了形的标题、横轴和纵轴标签以及刻度大小。 最后,我们使用show()函数显示形。运行代码后,将会看到一个趋势,显示了2020年旧金山每天的最高和最低温度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值