首先我们应该定义这个问题,比较的是两地的最高和最低气温
涉及内容:两个csv文件
涉及数据:日期、最高气温、最低气温各两个,也就是需要输出6组数据
我刚开始一直纠结于如何从处理一个csv文件,到能处理多个,这时第一想到的是把csv文件做成一个list,然后用for循环读取,但是最终呈现到图上只有第一个文件的数据图表信息
然后我想多个文件输出的数据属性也一样,那么应该可以用函数或者类,这时一个问题就是我不太明白什么时候该用函数,什么时候该用类,具体区别是什么,但是我想着用函数拆分这6个数据我试了下不行,那用类可以,分成三个函数即可,显然刚才想用一个函数处理是行不通的。但是用类发现代码太复杂,也比较多,想着可以用pandas,这个处理csv会更简单一些,代码如下:
import matplotlib.pyplot as plt
from datetime import datetime
import pandas as pd
filename_list=['death_valley_2018_simple.csv','sitka_weather_2018_simple.csv']
data1=pd.read_csv(filename_list[0])
data1=data1.fillna(method='ffill')
dates1=pd.to_datetime(data1['DATE'])
highs1=data1['TMAX']
lows1=data1['TMIN']
data2=pd.read_csv(filename_list[1])
data2=data2.fillna(method='ffill')
dates2=pd.to_datetime(data2['DATE'])
highs2=data2['TMAX']
lows2=data2['TMIN']
#print(dates1)
#根据数据绘制图形
fig=plt.figure(dpi=128,figsize=(10,6))
plt.plot(dates1,highs1,c='red',alpha=0.5)
plt.plot(dates1,lows1,c='blue',alpha=0.5)
plt.plot(dates2,highs2,c='red',alpha=0.5)
plt.plot(dates2,lows2,c='blue',alpha=0.5)
plt.fill_between(dates1,highs1,lows1,facecolor='blue',alpha=0.1)
plt.fill_between(dates2,highs2,lows2,facecolor='blue',alpha=0.1)
#设置图形格式
plt.title('Daily high and low temperatures, 2018\nDeath Valley,CA&Sitka',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()
需注意内容:csv的时间内容需要转换成时间戳,pandas是自带一个转换时间戳的函数的,我还自己瞎折腾了一番
注意缺失值处理