python繪制風(fēng)場方向和大小quiver問題
最近需要根據(jù)再分析資料的U風(fēng)和V風(fēng)分析背景場的風(fēng)場走向和大小,需要在地圖上繪制風(fēng)場箭頭。
先看一下結(jié)果:
長度代表風(fēng)速大小,箭頭指向代表風(fēng)向。繪制的經(jīng)緯度區(qū)間由計(jì)算的經(jīng)緯度數(shù)組決定。
一、python調(diào)用quiver繪制風(fēng)場箭頭
風(fē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)將箭頭的長度縮放到合理的大小。要改變箭頭的長度請(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' ] 箭頭尺寸(除長度外)以此單位的倍數(shù)計(jì)算——即是說選定單位后,箭頭尺寸即是此單位的倍數(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)無關(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)。例如,使用它來繪制漸變場(gradient field)。 或者,可以將任意角度指定為以水平軸逆時(shí)針方向的度數(shù)值的數(shù)組。 注意:反轉(zhuǎn)數(shù)據(jù)軸將相應(yīng)地僅使用angles='xy'反轉(zhuǎn)箭頭。 scale : None, float, optional 每個(gè)箭頭長度單位的數(shù)據(jù)單位數(shù)量,例如,每個(gè)繪圖寬度m / s;參數(shù)scale越小箭頭越長。默認(rèn)是None 若是None,一個(gè)簡單的自動(dòng)縮放算法將被采用,基于平均矢量長度和適量的數(shù)量。箭頭長度單位由scale_units參數(shù)給出。 width : scalar(標(biāo)量), optional 箭桿(shaft)的寬度,以箭頭單位衡量。默認(rèn)是由以上單位的選擇和矢量數(shù)量來決定。常用的初始值是0.005倍的畫的寬度(width of the plot) headwidth : scalar, optional 頭部寬度相對(duì)于箭桿寬度的倍數(shù),默認(rèn)是3倍 headlength : scalar, optional 軸交叉處的頭部長度,默認(rèn)是4.5
二、python在地圖上繪制風(fē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)提?。?/p>
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)場箭頭
fig = plt.figure(figsize=(8, 6)) m = Basemap(projection='cyl', llcrnrlat=min(latlist), llcrnrlon=min(lonlist), urcrnrlat=max(latlist), urcrnrlon=max(lonlist)) # 使用Basemap獲取地圖 # 通過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)場箭頭 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ì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07梅爾倒譜系數(shù)(MFCC)實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了梅爾倒譜系數(shù)(MFCC)實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06Python快速實(shí)現(xiàn)分列轉(zhuǎn)到行的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用Python快速實(shí)現(xiàn)分列轉(zhuǎn)到行的效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)一下2023-03-03python 多線程將大文件分開下載后在合并的實(shí)例
今天小編就為大家分享一篇python 多線程將大文件分開下載后在合并的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-11-11基于python實(shí)現(xiàn)ROC曲線繪制廣場解析
這篇文章主要介紹了基于python實(shí)現(xiàn)ROC曲線繪制廣場解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06django自定義Field實(shí)現(xiàn)一個(gè)字段存儲(chǔ)以逗號(hào)分隔的字符串
這篇文章主要介紹了django自定義Field實(shí)現(xiàn)一個(gè)字段存儲(chǔ)以逗號(hào)分隔的字符串的示例,需要的朋友可以參考下2014-04-04Python?多線程知識(shí)點(diǎn)總結(jié)及實(shí)例用法
在本篇內(nèi)容里小編給大家整理了一篇關(guān)于Python?多線程知識(shí)點(diǎn)總結(jié)及實(shí)例用法,對(duì)想好學(xué)習(xí)PY的用戶非常友好,需要的參考下吧。2021-12-12