利用matplotlib繪製折線圖:CSV格式
阿新 • • 發佈:2019-01-04
熬過初學階段的不適和挫敗感,我們其實完全可以掌握一個全新的領域。
本文為《python程式設計 從入門到實踐》(以下簡稱參考書》中第16章 下載資料中的內容,利用matplotlib繪製最高及最低氣溫折線圖。
在此整理為筆記,一為溫習,二為備份,以便日後再次學習,三也為網友提供學習資料。
注:本文程式碼均可直接複製到python文字編輯器中,在執行環境安裝完整的前提下均可直接執行。
認識CSV檔案頭
csv檔案是一以逗號分隔資料的檔案,可以用Excel、文字文件開啟。在此以參考書中的氣象資料為例進行介紹。
△記事本中csv檔案顯示形式
△Excel中csv檔案顯示形式
用python讀取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()
結果圖
上圖即為用上一節程式碼繪製的圖件。