因為監測資料中風速風向分析的需求,經常需要繪制風玫瑰圖、趨勢圖等。在開始做這項工作的時候,在Excel中繪圖,但是真實太無聊了,浪費時間,而且本人審美水準極差,繪制效果自然你懂的。
剛好以前因為ArcGIS自動化處理的需求,學過一陣子Python,又因為這些圖像的繪制大多是程式化的東西,自動實作起來難度較低,且風格可以高度一緻。
有一列風向及對應同時刻的風速資料即可使用Python繪制好看的風玫瑰圖了。
除了matplotlib子產品還需要windrose子產品,可在CMD中通過如下指令安裝:
pip install windrose
如果需要從Excel中擷取資料還需要xlrd子產品:
pip install xlrd
資料從Excel檔案中擷取,代碼中使用的資料格式如下圖:
以下是我在繪制簡單風玫瑰圖過程中使用的代碼
import xlrd
import matplotlib as mpl
from matplotlib import pyplot as plt
from windrose import WindroseAxes
import matplotlib.cm as cm
mpl.rcParams['font.sans-serif'] = ['SimHei']
def new_axes():
fig = plt.figure(figsize=(4, 4), dpi=80, facecolor='w', edgecolor='w')
rect = [0, 0, 1, 1]
ax = WindroseAxes(fig, rect, axisbg='w')
fig.add_axes(ax)
return ax
#...and adjust the legend box
def set_legend(ax):
l = ax.legend(shadow=False, bbox_to_anchor=[1, 0])
plt.setp(l.get_texts(), fontsize=12)
for sn in range(2): #2個sheet中都有資料,一次繪制多個風玫瑰圖
workspace=(r"……工作空間")
mybook=xlrd.open_workbook(workspace+r'……檔案名')#打開檔案
mysheet=mybook.sheet_by_index(sn)
rows=mysheet.nrows
ws=mysheet.col_values(5) #風速
wd=mysheet.col_values(6) #風向
ws.pop(0)
ws.pop(0)
wd.pop(0)
wd.pop(0)
sl=[0,0.2,1.5,3.3,5.4,7.9] #風速重分類間斷點
ax = new_axes()
ax.contourf(wd,ws,bins=sl,normed=True,cmap=cm.cool) #使用matplotlib内置colormap進行色彩分割
ax.set_title(mysheet.name,fontsize=15,loc='right')
set_legend(ax)
plt.show()
繪制結果如下: