python繪制風(fēng)場(chǎng)方向和大小quiver問(wèn)題
最近需要根據(jù)再分析資料的U風(fēng)和V風(fēng)分析背景場(chǎng)的風(fēng)場(chǎng)走向和大小,需要在地圖上繪制風(fēng)場(chǎng)箭頭。
先看一下結(jié)果:

長(zhǎng)度代表風(fēng)速大小,箭頭指向代表風(fēng)向。繪制的經(jīng)緯度區(qū)間由計(jì)算的經(jīng)緯度數(shù)組決定。
一、python調(diào)用quiver繪制風(fēng)場(chǎng)箭頭
風(fēng)場(chǎng)主要是用箭頭表示風(fēng)的方向和大小,python中調(diào)用的方法為:
Axes.quiver(*args, data=None, **kw)
調(diào)用quivers的形式:
quiver(X, Y, U, V, C, **kw)
X、Y是箭頭的位置,U、V是箭頭數(shù)據(jù)(data),C是箭頭的顏色。
如果X、Y不存在(absent),他們將作為均勻網(wǎng)格被生成。
默認(rèn)設(shè)置會(huì)自動(dòng)將箭頭的長(zhǎng)度縮放到合理的大小。要改變箭頭的長(zhǎng)度請(qǐng)參看 scale 和scale_units兩個(gè)關(guān)鍵字參數(shù)。
quiver函數(shù)的參數(shù):
X: 1D or 2D array, sequence, optional 1維或2維數(shù)組,序列(sequence),可自選(optional),箭頭位置的x坐標(biāo) Y: 1D or 2D array, sequence, optional 1維或2維數(shù)組,序列,可自選,箭頭位置的y坐標(biāo) U: 1D or 2D array or masked array, sequence 1維或2維數(shù)組或掩碼數(shù)組(參看masked array https://blog.csdn.net/liukai2918/article/details/78419302),序列,箭頭矢量的x分量 V: 1D or 2D array or masked array, sequence 1維或2維數(shù)組或掩碼數(shù)組,序列,箭頭矢量的y分量 C: 1D or 2D array, sequence, optional 1維或2維數(shù)組,序列(sequence),可自選,箭頭顏色 units(單位): [ 'width' | 'height' | 'dots' | 'inches' | 'x' | 'y' | 'xy' ] 箭頭尺寸(除長(zhǎng)度外)以此單位的倍數(shù)計(jì)算——即是說(shuō)選定單位后,箭頭尺寸即是此單位的倍數(shù) ‘width'或'height':軸(axis)的寬度或高度 ‘dots'或'inches':像素或英寸,基于圖的dpi ‘x', ‘y'或‘xy':分別是X、Y或X2+Y2的數(shù)據(jù)單位(data units) 箭頭依單位不同而不同。對(duì)于'x'或'y',箭頭會(huì)隨著其一的增大(zoom in)而增大;對(duì)于其他單位,箭頭的大小與縮放狀態(tài)(zoom state)無(wú)關(guān)。對(duì)于'width'或'height',當(dāng)窗口重置時(shí),箭頭的大小會(huì)隨著軸(axes)的寬度和高度的增大而增大;低于同意'dots'或'inches'。重置不會(huì)改變箭頭。 angles: [‘uv' | ‘xy'], array, 可自選 用于決定箭頭角度的方法,默認(rèn)是'uv' ‘uv':箭頭的縱橫比(axis aspect ratio)為1,所以若U*==*V,則繪圖上箭頭的方向與水平軸逆時(shí)針呈45度(正向右)。 ‘xy': 箭頭從(x,y)指向(x + u,y + v)。例如,使用它來(lái)繪制漸變場(chǎng)(gradient field)。 或者,可以將任意角度指定為以水平軸逆時(shí)針?lè)较虻亩葦?shù)值的數(shù)組。 注意:反轉(zhuǎn)數(shù)據(jù)軸將相應(yīng)地僅使用angles='xy'反轉(zhuǎn)箭頭。 scale : None, float, optional 每個(gè)箭頭長(zhǎng)度單位的數(shù)據(jù)單位數(shù)量,例如,每個(gè)繪圖寬度m / s;參數(shù)scale越小箭頭越長(zhǎng)。默認(rèn)是None 若是None,一個(gè)簡(jiǎn)單的自動(dòng)縮放算法將被采用,基于平均矢量長(zhǎng)度和適量的數(shù)量。箭頭長(zhǎng)度單位由scale_units參數(shù)給出。 width : scalar(標(biāo)量), optional 箭桿(shaft)的寬度,以箭頭單位衡量。默認(rèn)是由以上單位的選擇和矢量數(shù)量來(lái)決定。常用的初始值是0.005倍的畫的寬度(width of the plot) headwidth : scalar, optional 頭部寬度相對(duì)于箭桿寬度的倍數(shù),默認(rèn)是3倍 headlength : scalar, optional 軸交叉處的頭部長(zhǎng)度,默認(rèn)是4.5
二、python在地圖上繪制風(fēng)場(chǎng)
1. 數(shù)據(jù)準(zhǔn)備
quiver(X, Y, U, V, C, **kw)
X:經(jīng)度,這里使用一維數(shù)組Y:緯度,這里使用一維數(shù)組U:U風(fēng),根據(jù)經(jīng)緯度從數(shù)據(jù)集中提取的U風(fēng),一維數(shù)組V:V風(fēng),根據(jù)經(jīng)緯度從數(shù)據(jù)集中提取的V風(fēng),一維數(shù)組C:顏色,隨便設(shè)置
width:0.005
scale:200 設(shè)置箭頭比例,可以自行調(diào)節(jié)嘗試
headwidth:2
m.quiver(x, y, u_wind, v_wind, color='deepskyblue', width=0.005, scale=200, headwidth=2)
經(jīng)緯度設(shè)置:
# 用兩個(gè)列表存儲(chǔ)研究區(qū)域的經(jīng)緯度,這里取正負(fù)5°的區(qū)間。
lonlist = []
latlist = []
for k in np.linspace(appro_lat - 5, appro_lat + 5, 21):
for i in np.linspace(appro_lon - 5, appro_lon + 5, 21):
lonlist.append(i)
latlist.append(k)U,V風(fēng)提取:
u_wind = []
v_wind = []
for i in range(len(lonlist)):
u_wind.append(nc_obj.variables['u10'][time_index][latitude.index(latlist[i])][longitude.index(lonlist[i])])
v_wind.append(nc_obj.variables['v10'][time_index][latitude.index(latlist[i])][longitude.index(lonlist[i])])這里都是用一維數(shù)組表示,具體的情況將根據(jù)自己的需要設(shè)置。
2. 在地圖上繪制風(fēng)場(chǎng)箭頭
fig = plt.figure(figsize=(8, 6))
m = Basemap(projection='cyl', llcrnrlat=min(latlist), llcrnrlon=min(lonlist), urcrnrlat=max(latlist),
urcrnrlon=max(lonlist)) # 使用Basemap獲取地圖
# 通過(guò)readshapefile讀取地圖文件shp
m.readshapefile(CN_pro', 'states') // 根據(jù)自己的需要readshapefile讀取地圖文件
m.drawcoastlines(color='black')
m.drawstates(color='black')
m.drawcountries(color='black')
x, y = m(*(lonlist, latlist)) # 將lats / lons轉(zhuǎn)換為地圖投影坐標(biāo)
m.drawmeridians(np.arange(math.ceil(min(lonlist)), int(max(lonlist)), 5), labels=[0, 0, 0, 1])
m.drawparallels(np.arange(math.ceil(min(latlist)), int(max(latlist)), 5), labels=[1, 0, 0, 0])
# 在地圖上繪制BestTrack的經(jīng)緯度
best_lon, best_lat = m(lon[t], lat[t])
# 在地圖上繪制點(diǎn)
m.plot(best_lon, best_lat, 'o', color='red', ms=5)
# 繪制風(fēng)場(chǎng)箭頭
m.quiver(x, y, u_wind, v_wind, color='deepskyblue', width=0.005, scale=200, headwidth=2)
plt.show()需要在地圖上繪制衛(wèi)星云圖亮溫值請(qǐng)參考:python繪制登陸時(shí)的衛(wèi)星云圖(TBB)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
TensorFlow利用saver保存和提取參數(shù)的實(shí)例
今天小編就為大家分享一篇TensorFlow利用saver保存和提取參數(shù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
梅爾倒譜系數(shù)(MFCC)實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了梅爾倒譜系數(shù)(MFCC)實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
Python快速實(shí)現(xiàn)分列轉(zhuǎn)到行的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用Python快速實(shí)現(xiàn)分列轉(zhuǎn)到行的效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)一下2023-03-03
python 多線程將大文件分開(kāi)下載后在合并的實(shí)例
今天小編就為大家分享一篇python 多線程將大文件分開(kāi)下載后在合并的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
基于python實(shí)現(xiàn)ROC曲線繪制廣場(chǎng)解析
這篇文章主要介紹了基于python實(shí)現(xiàn)ROC曲線繪制廣場(chǎng)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
django自定義Field實(shí)現(xiàn)一個(gè)字段存儲(chǔ)以逗號(hào)分隔的字符串
這篇文章主要介紹了django自定義Field實(shí)現(xiàn)一個(gè)字段存儲(chǔ)以逗號(hào)分隔的字符串的示例,需要的朋友可以參考下2014-04-04
Python?多線程知識(shí)點(diǎn)總結(jié)及實(shí)例用法
在本篇內(nèi)容里小編給大家整理了一篇關(guān)于Python?多線程知識(shí)點(diǎn)總結(jié)及實(shí)例用法,對(duì)想好學(xué)習(xí)PY的用戶非常友好,需要的參考下吧。2021-12-12

