话不多说,先上图,随后会放上相应的代码以及代码讲解。如果只需要抄代码,看第二段即可;若需看详细讲解,请往下拉~
《Python编程:从入门到实践》第16章笔记
1. 气温变化图
用python绘制某地区2014年全年的气温变化图如下:
实现该图的相关代码如下:
import csv
from datetime import datetime
from matplotlib import pyplot as plt
#从文件中获取日期和最高气温
filename = 'sitka_weather_2014.csv'
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
dates,highs = [],[]
for row in reader:
current_date = datetime.strptime(row[0],"%Y-%m-%d")
dates.append(current_date)
high = int(row[1])
highs.append(high)
print(highs)
#根据数据绘制图形
fig = plt.figure(dpi=128,figsize=(10,6))
plt.plot(dates,highs,c='red')
#设置图形的格式
plt.title("Daily high temperatures - 2014",fontsize=24)
plt.xlabel('',fontsize=16)
fig.autofmt_xdate()
plt.ylabel("Temperature(F)",fontsize=16)
plt.tick_params(axis='both',which='major',labelsize=16)
plt.show()
3. 代码讲解
准备工作:下载matplotlib
包,具体安装方法请参考新手爬虫教程。
读取数据
python读取数据包括一系列的过程,为了讲清楚open()
函数,csv.reader()
函数,我画了一个 流程图方便理解。
next()函数
:每运行一次next()
,都会返回文件中的下一行的数据。本代码只调用了next()
一次,因此得到的是数据的第一行(文件头),并将返回的数据存储在header_row
,头文件数据读取情况如下:
0 AKDT
1 Max TemperatureF
2 Mean TemperatureF
3 Min TemperatureF
......
20 CloudCover
0 AKDT
:表示第0行为数据日期;1 Max TemperatureF
:表示第一行为日内最高温。
row[0],row[1]
:每行的第0列数据,即日期;每行的第1列数据,即最高温。
dates,highs = [],[]
:创建了一个名为dates,highs
的空列表,用for
循环遍历文件中余下的各行;reader
对象从其停留的地方,继续往下读取CSV
文件。由于上一步已经读取了文件头行(头文件),这个循环将从第二行开始(从这行开始包含的是实际数据)。每次执行该循环时,都将索引的数据附加到dates,highs
末尾。
datetime.strptime(row[0],"%Y-%m-%d")
:读取row[0]
的日期数据时,格式为‘2014-1-1’
,是字符串格式,需将其转化成可以识别的日期格式。因此,需要引入datetime
模块和strptime()
函数。
strptime()
函数的各参数及其含义如下:
参数 | 含义 |
---|---|
%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) |
绘图:关于绘图和设置图形格式,后面会做一个较为全面的总结,上述代码已经可以做一些简单的绘图啦~