[数据可视化]使用matplotlib对CSV文件数据进行绘图
使用CSV格式的锡特卡天气数据
绘制2018年1月1日的天气数据,先放成果:
代码部分包括以下内容:
- 分析CSV文件头
- 打印文件头及其位置
- 提取并读取数据
- 绘制温度图表:模块datetime;给图表区域着色
具体解释放在代码里了。
import csv
from datetime import datetime
import matplotlib.pyplot as plt
filename = 'data/sitka_weather_2018_simple.csv'
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
#模块csv包含函数next(),调用它并传入阅读器对象时,将返回文件的下一行。上述代码中只、
#调用了next()一次,因此得到的是文件的第一行,其中包含文件头。
#print(header_row)
#reader处理文件中以逗号分隔的第一行数据,并将每项数据都作为一个元素存储在列表中。
# for index, column_header in enumerate(header_row):
# #对列表调用了enumerate()来获取每个元素的索引及其值
# print(index, column_header)
# 从文件中获取日期、最高温度和最低温度。
dates, highs, lows = [], [], []
for row in reader: #已经读取了文件头行,循环将从第二行——从这行开始包含实际数据
current_date = datetime.strptime(row[2], '%Y-%m-%d')
#将字符串"20xx-xx-xx"转换为一个表示相应日期的对象
high = int(row[5])
low = int(row[6])
dates.append(current_date)
highs.append(high)
lows.append(low)
# 根据最高温度绘制图形。
plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.plot(dates, highs, c='red',alpha=0.5)
#将日期、最高温度列表传给plot(), 颜色red; alpha:指定颜色透明度,0透明,1不透明
ax.plot(dates, lows, c='blue',alpha=0.5)
ax.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1)
#方法fill_between()着色:一个x值系列(dates),两个y值系列(highs和lows),facecolor指定填充区域颜色
# 设置图形的格式。
ax.set_title("2018年每日最高温度", fontsize=24)#阿拉斯加州锡特卡2018年7月的每日最高温度
ax.set_xlabel('', fontsize=16)#还没有添加日期,因此没给x轴加标签,但确实修改了字号
fig.autofmt_xdate() #调用fig.autofmt_xdate()来绘制倾斜的日期标签,以免其彼此重叠
ax.set_ylabel("温度 (F)", fontsize=16)
ax.tick_params(axis='both', which='major', labelsize=16)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文字体设置-黑体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
plt.show()