氣溫圖#導入模塊 csv 後import csvfrom datetime import datetimefrom matplotlib import pyplot as plt#將要使用的文件的名稱存儲在 filename 中filename='sitka_weather_2014.csv'#打開這個文件,並將結果文件對象存儲在 f 中with open(filename) as f:#調用 csv.reader() ,並將前面存儲的文件對象作為實參傳遞給它# 從而創建一個與該文件相關聯的閱讀器( reader )對象 reader=csv.reader(f)#調用next()並將閱讀器對象傳遞給它時,得到的是文件的第一行,其中包含文件頭 header_row=next(reader)#創建三個列表dates,highs,lows,將日期時間,最高氣溫,最低氣溫,分別記錄到三個列表當中 dates,highs,lows=[],[],[] for row in reader: # 針對 ValueError 異常,列印一條錯誤消息, # 指出缺失數據的日期 try: #設置日期格式為****-**-**,Python中的第一列為第0列 # 所以高溫數據中的1代表CSV文件中的第二列,以下依次類推 current_date=datetime.strptime(row[0],"%Y-%m-%d") high=int(row[1]) low=int(row[3]) except ValueError: print(current_date,'missing data') else: dates.append(current_date) highs.append(high) lows.append(low)#設置圖紙的解析度和圖紙大小,繪製日期、高溫、低溫折線圖,顏色,透明度fig=plt.figure(dpi=128,figsize=(10,6))plt.plot(dates,highs,c='red',alpha=0.5)plt.plot(dates,lows,c='blue',alpha=0.5)#給高溫、低溫的間隔區域著色,透明度加大,與低溫曲線區分plt.fill_between(dates,highs,lows,facecolor='blue',alpha=0.1)# 設置圖形的格式plt.title("Daily high and low 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()
2.顏色表圖
import matplotlib as mplimport matplotlib.pyplot as pltimport numpy as np#創建包含九種顏色的列表red_yellow_green=['#d73027','#f46d43','#fdae61','#fee08b','#ffffbf','#d9ef8b', '#a6d96a','#66bd63','#1a9850']#設置參數,創建一個子圖sample_size=1000fig,ax=plt.subplots(1)#創建一個for循環,分別繪製九種顏色的散點圖,range(9)代表上述列表中的九種顏色for i in range(9): #np.cumsum() 累計求和 y=np.random.normal(size=sample_size).cumsum() # 僅輸入stop(sample_size)值,此時start默認從0開始 x=np.arange(sample_size) ax.scatter(x,y,label=str(i),linewidth=0.1,edgecolors='grey', facecolor=red_yellow_green[i])#顯示圖例ax.legend()plt.show()
3.矢量場流線圖
#矢量場可以通過為每個點指定一個線條和一個或多個箭頭的方式來表示出來#強度根據線條長度來判斷,方向按照箭頭方向來判斷import matplotlib.pyplot as pltimport numpy as np#0:5表示數組中數值所在的區間。100j表示劃分的密度,值越大,圖片越清晰Y,X=np.mgrid[0:5:100j,0:5:100j]#(X,Y)是一維numpy數組的等距網格,(U,V)參數匹配的是(X,Y)速率的二維numpy數組#U,V矩陣在維度上的行數必須等於Y的長度,列的數量必須匹配X的長度U=np.sin(X)V=np.sin(Y)#pprint 包含一個「美觀印表機」,用於生成數據結構的一個美觀視圖。from pprint import pprint# print()和pprint()都是python的列印模塊,功能基本一樣# 唯一的區別就是pprint()模塊列印出來的數據結構更加完整,每行為一個數據結構,更加方便閱讀列印輸出結果。print ("X")pprint(X)#pprint()採用分行列印輸出print ("Y")pprint(Y)#可視化矢量場plt.streamplot(X,Y,U,V)plt.show()
得到以下文本
X
array([[0. , 0.05050505, 0.1010101 , ..., 4.8989899 , 4.94949495,
5. ],
[0. , 0.05050505, 0.1010101 , ..., 4.8989899 , 4.94949495,
5. ],
[0. , 0.05050505, 0.1010101 , ..., 4.8989899 , 4.94949495,
5. ],
...,
[0. , 0.05050505, 0.1010101 , ..., 4.8989899 , 4.94949495,
5. ],
[0. , 0.05050505, 0.1010101 , ..., 4.8989899 , 4.94949495,
5. ],
[0. , 0.05050505, 0.1010101 , ..., 4.8989899 , 4.94949495,
5. ]])
Y
array([[0. , 0. , 0. , ..., 0. , 0. ,
0. ],
[0.05050505, 0.05050505, 0.05050505, ..., 0.05050505, 0.05050505,
0.05050505],
[0.1010101 , 0.1010101 , 0.1010101 , ..., 0.1010101 , 0.1010101 ,
0.1010101 ],
...,
[4.8989899 , 4.8989899 , 4.8989899 , ..., 4.8989899 , 4.8989899 ,
4.8989899 ],
[4.94949495, 4.94949495, 4.94949495, ..., 4.94949495, 4.94949495,
4.94949495],
[5. , 5. , 5. , ..., 5. , 5. ,
5. ]])