# incoding=gbk
import csv
from datetime import datetime
from matplotlib import pyplot as plt
# 从文件中获取日期、最高气温和最低气温
filename = 'sitka_weather_2018_full.csv'
with open(filename) as f:
"""
调用csv.reader(),并将前面存储的文件对象作为实参传递给它,从而创建一个与该
文件相关联的阅读器(reader)对象。我们将这个阅读器对象存储在reader中。
模块csv包含函数next(),调用它并将阅读器对象传递给它时,它将返回文件中的下一行。
"""
reader = csv.reader(f)
header_row = next(reader)
# print(header_row)
for index, column_header in enumerate(header_row):
print(index, column_header)
dates, highs, lows = [], [], []
for row in reader:
"""错误检查,使用try-except-else代码块来处理数据缺失的问题"""
try:
"""
方法strptime(),将包含所需日期的字符串作为第一个实参,第二个实参告诉
Python如何设置日期的格式
%A 星期的名称,如Monday,大写全称,小写简称
%B 月份名,如January,大写全称,小写简称
%m 用数字表示的月份(01~12)
%d 用数字表示月份中的一天(01~31)
%Y 四位的年份,如2015
%y 两位的年份,如15
%H 24小时制的小时数(00~23)
%I 12小时制的小时数(01~12)
%p am或pm
%M 分钟数(00~59)
%S 秒数(00~61)
"""
current_date = datetime.strptime(row[2], "%Y-%m-%d")
high = int(row[8])
low = int(row[9])
except ValueError:
print(current_date, "missing data")
else:
dates.append(current_date)
highs.append(high)
lows.append(low)
#print(dates)
#print(highs)
#print(lows)
# 根据数据绘制图形
fig = plt.figure(dpi= 128, figsize=(10, 6))
"""
实参alpha指定颜色的透明度。Alpha值为0表示完全透明,1(默认设置)表示完全不
透明。通过将alpha设置为0.5,可让红色和蓝色折线的颜色看起来更浅。
"""
plt.plot(dates, highs, c='red', alpha=0.5)
plt.plot(dates, lows, c='blue', alpha=0.5)
"""
方法fill_between(),它接受一个x值系列和两个y值系列,并填充两个y值系列之间的空间
"""
plt.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1)
# 设置图形的格式
title = "Daily high and low temperatures, 2018/1/1~2019/2/11"
title += "\nSITKA AIRPORT, AK US"
plt.title(title, fontsize=20)
plt.xlabel('Daily', fontsize=16)
"""调用fig.autofmt_xdate()来绘制斜的日期标签,以免它们彼此重叠"""
fig.autofmt_xdate()
plt.ylabel("Temperature(F)", fontsize=16)
plt.tick_params(axis='both', which="major", labelsize=16)
plt.show()