最近在完成一篇氣象預報的論文,涉及到深度學習與氣象繪圖。我覺得還是有必要寫一下我在這個過程中的一些經驗總結,借此機會與各位同道交流。
在我們使用深度學習時,肯定會用到繪圖命令,繪制loss與val_loss等等,以此查看模型的效果。
plt.plot(x,y,lw=,ls=,c=, alpha=, label=)
x:x坐標的數據
y:y坐標的數據
lw:指定線條寬度
ls:指定線條樣式,ls='-'為實線,ls='--'為虛斷線,ls='-.'為點虛線,ls=':'為虛線
c:指定線條顏色,c='r'為紅色,c='k'為黑色,c='y'為黃色
alpha:指定線條透明度,值越小越透明
label:指定線條的含義
代碼示例:
#導入庫
import matplotlib.pyplot as plt
import numpy as np
#設定畫布。dpi越大圖越清晰,繪圖時間越久
fig=plt.figure(figsize=(4, 4), dpi=300)
#導入數據
x=list(np.arange(1, 21))
y=np.random.randn(20)
#繪圖命令
plt.plot(x, y, lw=4, ls='-', c='b', alpha=0.1)
plt.plot()
#show出圖形
plt.show()
#保存圖片
fig.savefig("畫布")
繪圖結果:
在python中,有一個專門進行數據處理的庫包叫做pandas
# 導包
import pandas as pd
# 讀取excel文件
pd.read_excel('文件所在路徑')
提取excel中某一列數據:filename['列名'],返回值是一個列表。
取得excel中我們想要的數據後,下一步就是繪制:
...
# 第一步繪制畫布
fig=plt.figure(figsize=(7, 4), dpi=200)
# 第二步添加繪圖區.
# subplot命令是在畫布上添加一個繪圖區,括號裡的內容轉述為漢字為:“創建一個一行一列的繪圖區(一行一列就只有一個繪圖區),ax1是第一個繪圖區,facecolor用來設置畫布背景顏色,默認為白色
ax1 = fig.add_subplot(111, facecolor='green')
如果要創建一個兩行兩列(或者其他維度)的子圖區,分別為ax1,ax2,ax3,ax4:
ax1=fig.add_subplot(221)
ax2=fig.add_subplot(222)
ax3=fig.add_subplot(223)
ax4=fig.add_subplot(224)
效果如下:
實現上圖的效果,重點在於ax2=ax1.twinx() ,ax2和ax1共用x軸,但是ax1使用左側y軸,ax2使用右側y軸:
fig=plt.figure(figsize=(7,4),dpi=200) # 新建畫布
ax1=fig.add_subplot(111) # 設置繪圖區
line1,=ax1.plot(times,temps,'r:',lw=1,label='氣溫') # 創建折線
bar1 =ax1.bar(times,rains,color='b',label='降水量') # 創建條狀
ax2=ax1.twinx() # 設置共用x軸
line2,=ax2.plot(times,pressures,'k-',lw=1.2,label='氣壓')
# legend用來設置圖例,還可以添加參數ncol='',該參數用來設置圖例的列數,用於對齊
plt.legend((line1,bar1,line2),('氣溫','降水量','氣壓'),loc='center left',frameon=False,framealpha=0.5)
ax1.set_xlabel('時間 \ h') # 設置x軸
ax1.set_ylabel('氣溫(℃)\降水量(mm)') # 設置左側y軸
ax2.set_ylabel('氣壓(hPa)') # 設置右側y軸
plt.title("----") # 設置圖的名稱
plt.show()
通過字典的方式調節,在字典中存儲需要修改的的參數名稱和指定值大小,還可以存放更多參數:
font={'size':30,'color':'red'}
ax.set_xlabel('--',fontdict=font)
ax.set_ylabel('--',fontdict=font)
ax.grid() # 開啟x和y軸的網格
ax.grid(ls='--') # 開啟x和y軸的虛線網格
ax.grid(True,axis='x') # 開啟x軸的網格
ax.grid(True,axis='y') # 開啟y軸的網格
按照以下方式設置畫布:
fig,((ax1),(ax2))=plt.subplots(2,1,figsize=(5,5),dpi=200,sharex='all')
fig.subplots_adjust(hspace=0)
在共享x(y)軸時,兩邊y(x)軸的零刻度是不一致的,xlim和ylim用來設置坐標軸的范圍。
set_minor_locator用來在主刻度的基礎上設置或修改副刻度的大小,set_major_locator用來修改主刻度的單位顯示。使用前,必須引入庫包:
import matplotlib.ticker as ticker
舉例說明:
(1)此處設定副刻度為0.1個單位。
ax1.yaxis.set_minor_locator(ticker.MultipleLocator(0.1))
(2) 將右側主刻度設置為每10個單位顯示。
ax2.yaxis.set_major_locator(ticker.MultipleLocator(10))