天天看點

python用matplotlib畫玫瑰_用Python matplotlib 怎麼畫風向玫瑰圖 ,能給出程式的?

因為監測資料中風速風向分析的需求,經常需要繪制風玫瑰圖、趨勢圖等。在開始做這項工作的時候,在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()

繪制結果如下: