欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python繪制風(fēng)場方向和大小quiver問題

 更新時(shí)間:2023年08月16日 10:55:51   作者:小朱小朱絕不服輸  
這篇文章主要介紹了python繪制風(fēng)場方向和大小quiver問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

最近需要根據(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

matplotlib繪制圖像的官方網(wǎng)站介紹

二、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)文章

最新評(píng)論