熬过初学阶段的不适和挫败感,我们其实完全可以掌握一个全新的领域。
本文为《python编程 从入门到实践》(以下简称参考书》中第16章 下载数据中的内容,利用matplotlib绘制最高及最低气温折线图。
在此整理为笔记,一为温习,二为备份,以便日后再次学习,三也为网友提供学习资料。
注:本文代码均可直接复制到python文本编辑器中,在运行环境安装完整的前提下均可直接运行。
csv文件是一以逗号分隔数据的文件,可以用Excel、文本文档打开。在此以参考书中的气象数据为例进行介绍。
△记事本中csv文件显示形式
△Excel中csv文件显示形式
注:文件名为weather_2014。csv文件须与python文件放置在同一文件夹。
1.新建highs_lows.py文件
读取csv文件头
import csv #导入csv模块,该模块包含于python标准库中
filename='weather_2014.csv' #文件名
with open(filename) as f: #打开文件文件并将内容储存在reader中
reader=csv.reader(f) #读取并将内容储存在reader中
header_row=next(reader)#next()函数获取第一行,即文件头
print(header_row)
运行结果:
利用索引及索引值显示文件头
import csv #导入csv模块,该模块包含于python标准库中
filename='weather_2014.csv' #文件名
with open(filename) as f: #打开文件文件并将内容储存在reader中
reader=csv.reader(f) #读取并将内容储存在列表reader中
header_row=next(reader)#next()函数获取第一行,即文件头
for index,content in enumerate(header_row):#函数enumerate()获取每个元素索引及其值
print(index,content)
运行结果:
从上图可以看出日期、最高气温、最低气温分别位于第0/1/3列。
import csv #导入csv模块,该模块包含于python标准库中
from matplotlib import pyplot as plt #从matplotlib中导入pyplot并重命名为plt
from datetime import datetime #导入日期模块,用以转换字符型日期为日期型
#从文件中获取数值
filename='weather_2014.csv' #文件名
with open(filename) as f: #打开文件文件
reader=csv.reader(f) #读取并将内容储存在列表reader中
header_row=next(reader)#next()函数获取第一行,即文件头
#提取气温、日期数据存储在列表中
highs,lows,dates=[],[],[] #将最高气温、最低气温、日期储存在列表中
for row in reader: #遍历reader列表
high=int(row[1]) #将字符型温度转换成数值型
highs.append(high) #将最高气温附加到highs列表中
low=int(row[3])#同上
lows.append(low)
current_date=datetime.strptime(row[0],'%Y-%m-%d')#将字符型日期转换成日期型
dates.append(current_date)
#绘制气温图表
fig=plt.figure(dpi=128,figsize=(8,6))#添加绘图窗口,可绘制多条曲线
plt.plot(dates,highs,c='red',alpha=0.6)#plot()函数,第一个参数x值,第二个y值,第三个图形颜色
plt.plot(dates,lows,c='blue',alpha=0.6)
#设置图形的格式
plt.title("Daily high and low tempratures-2014\nDeath Valley,CA",fontsize=24)#图形标题
plt.xlabel("Date",fontsize=14)#x轴标题及字号
fig.autofmt_xdate()#调用fig.autofmt_xdate()绘制斜的日期标签,以防日期彼此重叠
plt.ylabel("Temperature(F)",fontsize=14)
plt.tick_params(axis='both',which='major',labelsize=8)#坐标轴格式
#给图表区域着色
plt.fill_between(dates,highs,lows,facecolor='blue',alpha=0.1)
"""
facecolor为填充区域颜色
alpha为填充颜色的透明度,0表示完全透明,1表示完全不透明
"""
#显示图表
plt.show()
上图即为用上一节代码绘制的图件。