氣象編程 | Python子圖、colorbar和標題

2021-02-20 氣象學家

畫子圖的教程網上一搜一大堆,不過我在畫的時候還是出了點奇奇怪怪的問題,依然是聊一聊我遇到的問題,儘管最終呈現效果還行,但是還是被幾個小問題卡住了,比如共用坐標軸設置了跟沒設置一樣,之後再找找大佬問一下吧。。。

大概的思路和此前一樣,利用函數和循環來做重複的工作,不過由於存在子圖和共用colorbar的情況,使用了一下返回參數之類的小技巧XD,我感覺這些還是挺好用的(抬頭挺胸)。

繼續是用EAR5 hourly data on pressure levels from 1979 to present的再分析資料,繪製了200hPa、500hPa、700hPa和850hPa的相對溼度和風場。

首先,我們要新建一個大的畫布,設置好它的大小和解析度:

fig = plt.figure(figsize=(12,8),dpi=150)

我們需要畫同一時刻四個不同層次,因此我們在這個大畫布裡設置四個子圖,給它們各自起一個名字:

ax1 = plt.subplot(221, projection = proj)
ax2 = plt.subplot(222, projection = proj)
ax3 = plt.subplot(223, projection = proj)
ax4 = plt.subplot(224, projection = proj)

(這裡沒有用subplots()是因為它好像不支持ccrs.PlateCarree()的投影方式,我就只能這樣來做了。而且不能用這個新建子圖的方式也讓我沒辦法令子圖共用坐標軸,不知道具體是哪裡出了問題。。。)

但是,在調用函數的時候,當然還是名字都一樣好寫一點咯~只畫4層情況的話,我使用了range來控制讀取的層次,那麼,如何將有規律的名字字符串轉換為變量的名字,再傳入自定義函數中呢?我使用了locals()來達成目的。

for lev in range(0,4):
r = obj['r'][0][lev][:][:]
u = obj['u'][0][lev][:][:]
v = obj['v'][0][lev][:][:]

the_string = f'ax{lev+1}'
ax = locals()[the_string]

ac = RHLevel(r, u, v, ax, lev)

為什麼要令函數等於「ac」呢?由於四張圖片所使用的填色規則都是一樣的,為了看起來順眼,只需要一條colorbar作為圖例會好很多。所以,我們可以將畫相對溼度的語句傳出,在循環的外部利用該信息繪製整張圖的colorbar。

def RHLevel(r, u, v, ax, lev):
.
ac = ax.contourf(lons[248:288,420:480],lats[248:288,420:480],r[248:288,420:480],levels=np.arange(60,110,10),
cmap='Greens',extend='both', alpha=0.9)
return ac

由於返回了ac的信息,所以在調用函數之後該函數是有一個「結果」的,可以為這個結果「起名」,這樣就可以在循環外用傳遞出來的結果來自定義colorbar了:

ac = RHLevel(r, u, v, ax, lev)
cb = fig.colorbar(ac, cax = cbar_ax,orientation='horizontal',spacing='proportional')

然後,就可以利用colorbar指令來定義它的位置、方向了,在這裡,l, b, w, h分別是指該colorbar的左側起始點、下側起始點、寬度和高度,數字則是百分比,比如說0.25是指大畫布的寬的0.25倍:

l,b,w,h = 0.25, 0.05, 0.5, 0.02
rect = [l,b,w,h]
cbar_ax = fig.add_axes(rect)
cb = fig.colorbar(ac, cax = cbar_ax,orientation='horizontal',spacing='proportional')

為了標出不同圖片所對應的層次,我們可以在函數中就給每一個子圖設置一個小標題。loc=''可以設置該標題的對齊位置,在這裡標題向左對齊。

ax.set_title(f'{level[lev]}hPa',fontsize=12,loc='left')

在大圖(循環外)中設置整張圖的標題(和子圖標題不一樣噢),具體有什麼區別可以搜一下fig/ax/plt的區別,有不少文章都講得很詳細:

plt.suptitle(f'2020年5月21日00時(世界時)各層相對溼度與風場',fontsize=18)

這次用到的新東西大概就是這些,感謝你的閱讀!

敬請各位大佬批評指正_(:3

目前已有220+位成員,

快快加入吧!

近40+位嘉賓,

查看嘉賓信息

根據嘉賓的擅長領域提問、探討,

不止於氣象。

1.提供純粹小範圍的交流空間,高質量信息;

2.分享氣象相關領域最新資訊並進行探討;

3.集中且有深度地回復大家提出的各種問題;

4.結識國內外氣象圈志趣相投的本碩博朋友;

5.獲取就業資訊和工作內推資格;

6.了解學術相關動態,並且探討相關細節;

7.提供相關氣象業務需求對接;

8.為考研/博、導師選擇等提供指導意見;

9.分享學術文章、專業書籍等資源;

10.閒聊氣象人的生活、工作、家庭等等;

.

    歡迎加入氣象學家交流群   

請備註:姓名/暱稱-單位/學校-研究方向

(未備註的不通過申請)


相關焦點

  • Python空間繪圖-Colorbar詳解
    第一個參數為colorbar傳入參數,代表colorbar所關聯的contourf,這種方式是最簡單的默認傳入,繪製出來的colorbar和cf是相匹配的,展示的也是cf的信息。cf=ax.contourf(... ...)fig.colorbar(cf)第二個參數為colorbar繪製的默認子圖位置參數,代表當前這個colorbar將要擺放的子圖位置。
  • 慢步學習,python語言編程,來扯扯語言的學習理解
    程式語言的學習,也在於累積程式語言語句的使用情景和效果。因此學習編程最有效的方式就是編寫實例程序。不在於程序的完備,在於理解程序原始碼的適用場景和效果。例如筆者之前寫的一個實例代碼對於編程老鳥筆者不敢說啥,但對於初學者,這樣的例子,真的很實用,簡短,容易理解,還具備一定的功能。
  • |python|電氣和電子工程師協會|編程...
    自動將生成基本走勢圖、移動平均線、RSI 和 MACD 指標,市場情況一目了然,避免因主觀預測失誤帶來的經濟損失。圖中的字體大小表示了該詞出現的頻率,可以清晰地看出用戶的喜好偏向。▲正版風變編程|python小課認準可愛的熊貓標示此次思哲與風變編程 | python小課合作推薦:四天人工智慧 python入門體驗課。
  • 「技術文章」《Python 資料庫 GUI CGI編程》
    2.1 Linux下安裝MySQLdb模塊 使用包安裝可以 wget http://sourceforge.net/projects/mysql-python/files/latest/download$ tar xfz MySQL-python-1.2.3.tar.gz$ cd MySQL-python-1.2.3$whereis mysql_config
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    高級編程(6套課程) 注:零基礎全能篇中,針對windows和liunx系統均有兩套課程可供選擇學習,單純學python,哪個系統都一樣,初學者只需選擇自己熟悉的系統學習相應課程即可。 因篇幅有限,以下展示的只是課程裡部分內容如對python課程有更多疑問 請諮詢客服 1零基礎入門全能班 01 –python簡介 02 第一個程序 03-python執行方式和pycharm設置 04-程序的注釋和算術運算符 05 程序執行原理 06變量的使用以及類型 07
  • Python基礎教程(一) - 函數和函數式編程
    什麼是函數函數是對程序邏輯進行結構化或過程化的一種編程方法。能將整塊代碼巧妙地隔離成易於管理的小塊,把重複的代碼放在函數中而不是進行大量的copy。前面使用過很多print()來進行列印,這是python提供的內建函數,你也可以自己創建函數,這叫做用戶自定義函數。創建函數你可以定義一個由自己想要功能的函數,用def語句來創建,標題行由def關鍵字,函數的名字,以及參數的集合(如果有的話)組成。
  • Python繪圖筆記:繪製等高線圖和交叉區域圖
    )*np.exp(-y**3/3)#np.arange()中第一個參數為起點,第二個參數為終點,第三個參數為步長x=np.arange(-1.5,1.5,0.1)y=np.arange(-1.5,1.5,0.1)#meshgrid的作用適用於生成網格型數據,可以接受兩個一維數組生成兩個二維矩陣,對應兩個數組中所有的(x,y)對X,Y=np.meshgrid(x,y)#可以理解為z=f(x,y),x和y
  • Python為什麼這麼火?小孩子適合學習python編程嗎?
    「人生苦短,我選Python」——魯迅程式語言由於學習門檻比較高,一直以來似乎只有程式設計師之間會互相討論,普通人也很難對冰冷的語法和算法什麼的感興趣。但自從Python出現後,程式語言和我們日常生活中的鴻溝被悄悄打破了,越來越多的人開始使用它,甚至開始愛上它。
  • python matplotlib畫圖教程學習:使用介紹
    除了圖中顯示的紅藍線型圖和散點圖,matplotlib還能繪製柱形圖、燭型圖、餅圖、3D圖形等等各種個性化圖形,將在後續文章一一介紹。matplotlib圖形的幾個主要對象:Figure對象整個圖形即是一個Figure對象。Figure對象至少包含一個子圖,也就是Axes對象。
  • python編程30個常用技巧
    打開APP python編程30個常用技巧 深度學習這件小事 發表於 2020-12-24 15:07:51 1、冒泡排序
  • Python成程式語言首選,人工智慧是其最大推力
    2018年,python程式語言榮獲「年度程式語言」稱號!在2018年獲得了最多的排行積分,贏得了3.62%佔比,其次是VisualBasic .NET和Java。Python如今確實已經成為大型程式語言的一部分。
  • 自學編程必看!Python學習5點思路(內附思維導圖)
    越來越多的人,都想加入到編程的行業中。如果說你現在已經有了想學習編程的想法,那麼接下來我們就談談如何去學習編程。小會在這裡為大家提供一個Python學習思路:1、了解編程基礎概念首先要對計算機有個基本的認識,了解編程基礎概念及用編程解決現實問題的基本流程。
  • 業界| 四大機器學習程式語言對比:R、Python、MATLAB、Octave
    原標題:業界 | 四大機器學習程式語言對比:R、Python、MATLAB、Octave 選自 towardsdatascience 作者:> Python 是一種用於通用編程的解釋型高級程式語言,由 Guido van Rossum 創建並於 1991 年首次發布。
  • 數據科學的Python軟體包
    Python是使用最廣泛的程式語言之一。儘管標準Python並沒有提供太多功能,但其數量眾多的開放原始碼和第三方庫在開發人員中頗受歡迎。您只需命名域,Python就會為您提供最佳的軟體包和庫。數據科學和機器學習是這個時代的兩項苛刻技術,而Python在這兩個領域的表現要好於優。除Python之外,R是數據科學項目中經常使用的另一種程式語言。
  • python爬蟲入門實戰!爬取博客文章標題和連結!
    最近有小夥伴和我留言想學python爬蟲,那麼就搞起來吧。準備階段爬蟲有什麼用呢?舉個最簡單的小例子,你需要《戰狼2》的所有豆瓣影評。最先想的做法可能是打開瀏覽器,進入該網站,找到評論,一個一個複製到文本中,保存,翻頁,接著複製,直到翻到最後一頁。
  • Python入門小迷宮,走完這個迷宮,就能掌握python編程基礎
    這是一個很神奇的迷宮,走完這個迷宮就能掌握python基礎。其實,這是一個用python做的迷宮小遊戲,非常簡單,但對於python初學者來說,還是有一定的挑戰性,但TONOW有源碼和教程,只要跟著python迷宮小遊戲的教程和相應的源碼,不僅很容易就能自己開發出這個遊戲,還能在這個過程中,掌握python編程的基礎哦!
  • Python和人工智慧有什麼關係?Python 和人工智慧的區別是什麼?
    人工智慧是一個大的範疇,包括很多方面的應用,比如機器學習,在機器學習中的回歸算法,它們是通過統計分析所有數據來建立多因式,然後求解式子,而在這個過程中程式語言起到的作用是清洗數據、處理數據、建立關係求解結果的作用,python適用於數據清洗且學習成本低,所以在一定程度上,好一部分人傾向於將python應用於人工智慧應用領域。
  • Python入門基礎之socket多線程編程,TCP伺服器和客戶端通信
    在上一篇文章中,我介紹了一下python3 socket編程的基礎,包括TCP、UDP客戶端和伺服器的建立過程(連結在最下方)。不過那個只是單線程的,伺服器一次只能和一個客戶端會話,多個客戶端的話只能等待。
  • biopython簡介
    biopython和bioperl, biojava項目類似,都是Open Bioinformatics Foundation組織的項目之一,旨在提供一個編程接口,方便生物信息數據的處理。
  • 放棄PK,擁抱合作——R和 Python 能做出什麼新花樣?
    產生這種觀點的原因之一是,人們根據所使用的程式語言的選擇將數據科學領域劃分為不同的陣營——R陣營和Python陣營,歷史證明了兩個陣營不能和諧相處。在數據科學領域中有一些人同時使用Python和R,但是他們的比例很小。另一方面,有很多人只致力於一種程式語言,但他們希望能夠使用對手的一些功能。例如,R用戶有時渴望Python固有的面向對象能力,同樣地,一些Python用戶渴望R中可用的統計分布的廣泛範圍。