python气象学_Python气象绘图教程(十)
這幾天一直在躺尸,只能找一些陳年材料和匯總了
本節(jié)提要:matplotlib繪圖時(shí),一些實(shí)用的解決辦法。包括降水量等值線的色號(hào)、風(fēng)矢桿顯示不正確的問題、臺(tái)風(fēng)符號(hào)、散點(diǎn)圖表示數(shù)值的兩種辦法、關(guān)于colobar的一些常用參數(shù)。
一、降水量等值線的色號(hào)
作為業(yè)務(wù)上常見應(yīng)用,在繪制降水量等值線填色圖時(shí),不能使用系統(tǒng)默認(rèn)的colormap,而需要指定降水等級(jí)和填色。本文使用中央氣象臺(tái)官網(wǎng)的降水量圖片,通過一個(gè)木函中的取色功能調(diào)取顏色,參考了微信群中一個(gè)大佬提供的代碼(具體是誰已經(jīng)忘了,希望大佬不會(huì)砸門@
囧
@)。
ax.bar(x1,y1,color='#A6F28F')ax.bar(x2,y2,color='#3DBA3D')ax.bar(x3,y3,color='#61BBFF')ax.bar(x4,y4,color='#0000FF')ax.bar(x5,y5,color='#FA00FA')ax.bar(x6,y6,color='#800040')
二、風(fēng)矢桿顯示了過多的圓圈
很久之前有個(gè)大佬發(fā)現(xiàn)自己繪制的圖像出現(xiàn)了很多不正確的圓圈,巨佬二號(hào)提出了解決方案——因?yàn)橹型怙L(fēng)矢桿量級(jí)不一樣,所以需要修改風(fēng)矢桿的風(fēng)速大小。
大佬出現(xiàn)問題的圖是這一張:
我嘗試本地風(fēng)場繪圖:
plt.barbs(lon,lat,u,v,zorder=5)
如圖,確實(shí)出現(xiàn)了許多圓圈,然而在實(shí)際數(shù)據(jù)中,這些數(shù)值為1m\s。通過巨佬提供的解決方案,繪制了新的風(fēng)場圖:
plt.barbs(lon,lat,u,v,barb_increments={'half':2,'full':4,'flag':20},zorder=5)
barb_increments={'half':2,'full':4,'flag':20}這一句,修改了風(fēng)矢桿長短桿線和三角分別代表的風(fēng)速大小。
三、臺(tái)風(fēng)符號(hào)
在將cartopy官網(wǎng)例子本土化的過程中,我發(fā)現(xiàn)matplotlib的marker中沒有現(xiàn)成的臺(tái)風(fēng)符號(hào),于是群內(nèi)巨佬三號(hào)提供了解決方案:
方案一:通過數(shù)字6和9的疊加來產(chǎn)生臺(tái)風(fēng)符號(hào)
ax.scatter(x,y2,s=200,marker='$6$',color='crimson')ax.scatter(x,y3,s=200,marker='$9$',color='crimson')
方案二:通過自定義臺(tái)風(fēng)符號(hào)來繪制
def get_hurricane():u = np.array([ [2.444,7.553],[0.513,7.046],[-1.243,5.433],[-2.353,2.975],[-2.578,0.092],[-2.075,-1.795],[-0.336,-2.870],[2.609,-2.016] ])u[:,0] -= 0.098codes = [1] + [2]*(len(u)-2) + [2]u = np.append(u, -u[::-1], axis=0)codes += codesreturn mpath.Path(3*u, codes, closed=False)hurricane = get_hurricane()ax.scatter(x,y1, s=350, marker=hurricane,edgecolors="crimson",?facecolors='none',?linewidth=3)
表面上看起來好像兩個(gè)都可以在繪圖實(shí)例中使用,但是6與9疊加有一個(gè)致命缺陷就是對(duì)每一個(gè)位置都需要微調(diào),數(shù)字9必須比數(shù)字6低一點(diǎn),這樣才能產(chǎn)生臺(tái)風(fēng)符號(hào),否則就是這樣的:
總結(jié)下來,在繪制一個(gè)臺(tái)風(fēng)符號(hào)時(shí),可以使用6與9疊加,繪制多個(gè)臺(tái)風(fēng)符號(hào)時(shí),推薦使用def?臺(tái)風(fēng)(復(fù)制粘貼到程序中即可使用)
四、散點(diǎn)圖表示數(shù)值大小的兩種辦法
散點(diǎn)圖常用的有兩種表示數(shù)值大小的辦法,一種是通過控制s,即圓圈直徑來表示數(shù)值;一種是通過控制顏色映射來表示數(shù)值。
ax1.scatter(lon,lat,s=number*50,c='blue',alpha=0.75,edgecolor='k')
ax.scatter(lon,lat,s=150,c=number,cmap='cool',alpha=0.75)
五、Colorbar的一些參數(shù)
經(jīng)常有同學(xué)在群里討論色條的尖尖角是怎么來的,于是將color常用的一些參數(shù)命令翻譯出來了。
ax
代表你需要傳入色條的ax
shrink=0.88
代表色條的相對(duì)長度
orientation='horizontal'
代表色條時(shí)橫向還是豎向,vertical代表垂直;horizontal代表水平
cax
表示你需要繪制色條的絕對(duì)位置
pad
色條和子圖ax之間的距離
extend=’neither’
色條的兩頭是否變尖,默認(rèn)為neither,兩頭為方的。both表示兩頭變尖。min表示數(shù)值小的那頭變尖。max表示數(shù)值大的那頭變尖
ticks
默認(rèn)將根據(jù)你的ax里的間距大小自動(dòng)分配,可以傳入一個(gè)列表自定義間距
format
控制刻度樣式,如‘%.3f’表示保留三位小數(shù)
還是通過上面地閃頻次的圖來表現(xiàn)參數(shù)命令:
b=plt.colorbar(a,shrink=1,orientation='vertical',pad=0.005,extend='max',format='%.2f')
修改了shrink,可以看出其和主圖的相對(duì)長度變化了。
修改了orientation,色條變?yōu)榇怪狈较颉?/p>
修改了pad,可以看出色條和子圖距離非常近了。
修改了extend,只顯示max,即最大值方向變尖。
修改了format,使得刻度顯示了兩位小數(shù)。
關(guān)于cax呢,這里也展示一個(gè)例子:
position=plt.axes([0.5,0,0.1,1])b=plt.colorbar(a,cax=position,shrink=1,orientation='vertical',pad=0.005,extend='max',format='%.2f')
我們給了colorbar的cax一個(gè)絕對(duì)位置[0.5,0],表示色條從圖上的相對(duì)于x軸一半的位置,相對(duì)于y軸的起點(diǎn)位置開始繪制。這樣色條就被放在中間位置了。我們嘗試修改絕對(duì)位置的值來深入理解。
position=plt.axes([0.25,0,0.4,0.75])b=plt.colorbar(a,cax=position,shrink=1,orientation='vertical',pad=0.005,extend='max',format='%.2f')
可以看出,色條被移動(dòng)到差不多x軸上0.25的位置了,色條變寬了,變短了,因?yàn)槲覀儗0.5,0,0.1,1]變成了[0.25,0,0.4,0.75],第三個(gè)數(shù)表示色條x方向的變化,0.1變?yōu)?.4,所以變寬了。第四個(gè)數(shù)表示色條y方向的變化,1變成了0.75,所以變短了。
Cartopy專輯已經(jīng)上線
往期回顧:
歡迎關(guān)注云臺(tái)書使公眾號(hào)
總結(jié)
以上是生活随笔為你收集整理的python气象学_Python气象绘图教程(十)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL数据库授权与索引
- 下一篇: 整型变量和整型常量呀