前面学习了用matplotlib来绘制折线图和散点图,以及用Pygal来绘制直方图。学以致用!现在利用前面学的知识将死亡谷的一年的温度可视化出来,看看为啥叫死亡谷!!!
本文用到的数据是来自《Python编程从入门到实践》配套资源中的death_valley_2014.csv文件。该文件是一个csv文件,什么叫csv文件呢?即就是用逗号将数据分隔开,然后写入文件,当然也有用其他符号来分隔的,不过比较常见的是用逗号来分隔。
数据获取方式:
一:从ituring.cn/book/1861 下载《Python编程从入门到实践》的配套资源,然后从中获取
二:私我,白嫖!
2.1 读取文件并查看有关数据
先来读取文件,以及看看文件里有哪些数据,如下
#3.死亡谷温度可视化
import csv
filename = "D:\python\python基础\数据可视化\数据可视化_02\death_valley_2014.csv"
#获取文件数据
with open(filename) as f:
reader = csv.reader(f)
first_row = next(reader)
for index, column in enumerate(first_row):
print(index, column)
这里处理csv文件的用的是csv库,当然也还有其他,比如pandas库。接下来给filename传递的是death_valley_2014.csv文件的绝对路径,当然你也可以传相对路径,然后调用csv.reader()函数来构建一个阅读器并赋值给reader,最后用next()函数来获取文件的第一行。打印的时候用了enumerate()函数,即就是枚举,它返回一个值和其对应的索引位置的可迭代对象,结果如下
可以看到时间,最高温度和最低温度对应的索引分别为0,1,3
2.2 提取日期,最高温度和最低温度
代码如下
import csv
from datetime import datetime
filename = "D:\python\python基础\数据可视化\数据可视化_02\death_valley_2014.csv"
#获取文件数据
with open(filename) as f:
reader = csv.reader(f)
first_row = next(reader)
#提取日期,最高温度和最低温度
dates, highs, lows = [], [], []
for row in reader:
try:
date = datetime.strptime(row[0], '%Y-%m-%d')
high = int(row[1])
low = int(row[3])
except ValueError:
print(date, 'missing data')
else:
dates.append(date)
highs.append(high)
lows.append(low)
print(dates)
这里之所以要用try…except…else来处理代码,就是防止数据错误使程序终止。这里用到了datetime模块的strptime()函数,作用是提前格式为’%Y-%m-%d’的日期。为了后面方便画图,这里把字符串格式的highs和lows转成了int型,可以分别打印看看效果
可以看到果然有数据错误:2014-02-16 00:00:00 missing data,我们去death_valley_2014.csv找到时间为2014-02-16的那行看看,会发现那行的数据是缺失的,如下
2.3 可视化温度数据
数据都准备好了,接下来就是绘图了,如下
#可视化温度数据
from matplotlib import pyplot as plt
fig = plt.figure(dpi=100, figsize=(8, 5))
plt.plot(dates, highs, c='red', alpha=0.5)
plt.plot(dates, lows, c='blue', alpha=0.5)
#填充highs,lows之间的区域,颜色为yellow,透明度为0.1
plt.fill_between(dates, highs, lows, facecolor='yellow', alpha=0.1)
#设置y轴范围以及使日期倾斜,避免重复
plt.ylim(10, 120)
fig.autofmt_xdate()
#设置坐标轴
plt.title("Temperature of 2014 ", fontsize=15)
plt.xlabel('', fontsize=13)
plt.ylabel("Temperature (F)", fontsize=13)
plt.tick_params(axis='both', labelsize=15)
plt.show()
其中plt.fill_between()函数的作用是填充highs和lows之间的区域,facecolor参数控制颜色,alpha参数控制颜色的透明度,alpha值范围为:0到1,值越小越透明。为了防止x轴的刻度重叠,使用fig.autofmt_xdate()函数来使刻度倾斜,以及使用plt.ylim()来控制y轴的范围。有关其他参数的作用在我上两篇里有说,需要的话可以参考。