基於Python的Grib數據可視化

来源:http://www.cnblogs.com/kallan/archive/2016/01/26/5160017.html
-Advertisement-
Play Games

利用Python語言實現Grib數據可視化主要依靠三個庫——pygrib、numpy和matplotlib。pygrib是歐洲中期天氣預報中心(ECMWF)的GRIG API C庫的Python介面,通過這個庫可以將Grib數據讀取出來;numpy是Python的一種開源的數值計算擴展,這種工具可用...


        利用Python語言實現Grib數據可視化主要依靠三個庫——pygrib、numpy和matplotlib。pygrib是歐洲中期天氣預報中心(ECMWF)的GRIG API C庫的Python介面,通過這個庫可以將Grib數據讀取出來;numpy是Python的一種開源的數值計算擴展,這種工具可用來存儲和處理大型矩陣;matplotlib是python著名的繪圖庫,它提供了一整套和matlab相似的命令API,十分適合互動式地進行製圖;在數據可視化過程中,我們常需要將數據在地圖上畫出來,所以還需要matplotlib的一個子包basemap,負責地圖繪製。

一、庫的安裝

    (一)matplotlib安裝

  • matplotlib依賴
    1. nose

    2. numpy

    3. pyparsing

    4. python-dateutil

    5. cycler

    6. pkg-config

    7. freetype

    8. libpng

  • 安裝過程

        這裡我都是通過源碼包安裝的,大家也可以再終端里通過pip install 命令來安裝 

        1、安裝nose

            解壓縮後,進入命令提示符 運行

1 python3 setup.py install

        2、安裝numpy

            解壓縮後,進入命令提示符 運行

1 python3 setup.py install

       3、安裝pyparsing

            解壓縮後,進入命令提示符 運行

1 python3 setup.py install

        4、安裝python-dateutil

            解壓縮後,進入命令提示符 運行

1 python3 setup.py install

        5、安裝cycler

            解壓縮後,進入命令提示符 運行

1 python3 setup.py install

       6、安裝pkg-config

1 ./configure --with-intermal-glib
2 make && date
3 sudo make install && date

        7、安裝freetype

1  ./configure
2  make && date
3  sudo make install && date

        8、安裝libpng

1  ./configure
2  make && date
3  sudo make install && date

        9、安裝matplotlib-1.5.0

            解壓縮後,進入命令提示符 運行

1 python3 setup.py install

    (二)basemap安裝

  • basemap依賴
    1. geos

    2. pyproj

  • 安裝過程

        1、安裝GEOS

 

1  ./configure
2  make && date
3  sudo make install && date

 

        2、安裝pyproj

1 python3 setup.py install

        3、安裝basemap

1 python3 setup.py install

    (三)pygrib安裝

  • pygrib依賴
    1. Jasper 

    2. GRIB API 

    3. numpy

    4. pyproj

  • 安裝過程

            由於之前已經安裝了numpy和pyproj,這裡只需安裝Jasper和GRIB API即可安裝pygrib

        1、安裝Jasper

1 ./configure
2 make && date
3 sudo make install && date

        2、安裝GRIB API

1 ./configure --with-jasper='/usr/local/'
2 make && date
3 sudo make install && date

        3、安裝pygrib

            安裝pygrib之前首先要根據自己的實際情況修改文件目錄下的setup.cfg文件,最主要的就是修改grib_api_dir和jasper_dir,這兩個是剛剛安裝的Jasper和GRIB API的路徑,如果這兩個地址不正確安裝會報錯

 1 # Rename this file to setup.cfg to set pygrib's
 2 # build options.
 3 # Follow instructions below for editing.
 4 [directories]
 5 # uncomment and set to grib_api install location.
 6 # Include files should be located in grib_api_dir/include and
 7 # the library should be located in grib_api_dir/lib.
 8 # If the libraries and include files are installed in separate locations,
 9 # use grib_api_libdir and grib_api_incdir to specify the locations
10 # separately.  
11 grib_api_dir = /usr/local
12 # if grib_api was built with jasper support for JPEG200,
13 # uncomment and set to jasper lib install location.
14 # If the libraries and include files are installed in separate locations,
15 # use jasper_libdir and jasper_incdir.
16 jasper_dir = /usr/local
17 # if grib_api was built with openjpeg support for JPEG200,
18 # uncomment and set to openjpeg lib install location.
19 # If the libraries and include files are installed in separate locations,
20 # use openjpeg_libdir and openjpeg_incdir.
21 #openjpeg_dir = /opt/local
22 # if grib_api was built with png support,
23 # uncomment and set to png lib install location.
24 # If the libraries and include files are installed in separate locations,
25 # use png_libdir and png_incdir.
26 png_dir = /usr
27 # if grib_api was built with png support,
28 # uncomment and set to zlib install location.
29 zlib_dir = /usr
30 # install man pages for command line utilities here
31 #man_dir = /usr/local/man
View Code

           修改好就可以正常安裝了

1 python3 setup.py install

二、grib數據讀取

        雖然我做的東西和氣象沾邊,但是我本身並不是氣象專業出身,所有這些東西都是我慢慢研究琢磨出來的,所以有些方面可能講的比較外行,有不對的地方歡迎大家留言指正。

    (一)導入pygrib模塊

1 >>> import pygrib

    (二)打開Grib文件

1 >>> grbs = pygrib.open('/Users/Kallan/Documents/data/echhae50.082')

    (三)提取文件信息

1 >>> grbs.seek(0)
2 >>> for grb in grbs:
3 grb
4 1:Geopotential Height:gpm (instant):regular_ll:isobaricInhPa:level 500:fcst time 24 :from 201507081200

       信息解讀    

        1 :數據列表的行號,有的文件可能包括多個數據

        Geopotential Height:數據的名稱

        gpm (instant):數據的單位

        regular_ll:常規數據,其實這個欄位我也不清楚

        isobaricInhPa:這個欄位表示的是數據屬性,此處表示是以hPa為單位的等壓面

        level 500:這個欄位表示的是高度層

        fcst time 24 :預報時效

        from 201507081200 :起報時間

    綜合上面的信息可以得出,這個文件是從2015年7月8日12時開始的24小時後500hPa等壓面高度場數據

    (四)導出文件數據

 1 >>> grb = grbs.select(name='Geopotential Height')[0]
 2 >>> data = grb.values
 3 >>> print(data.shape,data.min(),data.max())
 4 (37, 37) 5368.6796875 5941.0390625
 5 >>> lat,lon=grb.latlons()
 6 >>> print(lat,'\n',lon)
 7 [[  0.    0.    0.  ...,   0.    0.    0. ]
 8 [  2.5   2.5   2.5 ...,   2.5   2.5   2.5]
 9 [  5.    5.    5.  ...,   5.    5.    5. ]
10 ...,
11 [ 85.   85.   85.  ...,  85.   85.   85. ]
12 [ 87.5  87.5  87.5 ...,  87.5  87.5  87.5]
13 [ 90.   90.   90.  ...,  90.   90.   90. ]]
14 [[-90.  -87.5 -85.  ...,  -5.   -2.5   0. ]
15 [-90.  -87.5 -85.  ...,  -5.   -2.5   0. ]
16 [-90.  -87.5 -85.  ...,  -5.   -2.5   0. ]
17 ...,
18 [-90.  -87.5 -85.  ...,  -5.   -2.5   0. ]
19 [-90.  -87.5 -85.  ...,  -5.   -2.5   0. ]
20 [-90.  -87.5 -85.  ...,  -5.   -2.5   0. ]]

 

三、grib數據可視化

    (一)導入需要的模塊

1 >>> import matplotlib.pyplot as plt
2 >>> from mpl_toolkits.basemap import Basemap
3 >>> import numpy as np

    (二)創建一個figure

1 >>> plt.figure()
2 <matplotlib.figure.Figure object at 0x107e65198>

    (三)創建一個basemap實例

 1 >>> m=Basemap(projection='mill',lat_ts=10,llcrnrlon=lon.min(), \
 2  urcrnrlon=lon.max(),llcrnrlat=lat.min(),urcrnrlat=lat.max(), \
 3  resolution='c')
 4 >>> m.drawcoastlines(linewidth=0.25)
 5 <matplotlib.collections.LineCollection object at 0x1091c1f28>
 6 >>> m.drawcountries(linewidth=0.25)
 7 <matplotlib.collections.LineCollection object at 0x10621d0f0>
 8 >>> m.fillcontinents(color='coral',lake_color='aqua')
 9 >>> m.drawmapboundary(fill_color='aqua')
10 <matplotlib.patches.Rectangle object at 0x10918b3c8>
11 >>> m.drawmeridians(np.arange(0,360,30))
12 >>> m.drawparallels(np.arange(-90,90,30))

    (四)將lat,lon的數據格式轉換成投影需要的格式存入x,y

1 >>> x, y = m(lon,lat)

    (五)繪製等值線

1 >>> cs = m.contour(x,y,data,15,linewidths=1.5)

    (六)命名並顯示圖像

1 >>> plt.title('Geopotential Height Contour from Grib')
2 <matplotlib.text.Text object at 0x10918bda0>
3 >>> plt.show()

    (七)圖像展示

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、寫在前面緩存作為系統性能優化的一大殺手鐧,幾乎在每個系統或多或少的用到緩存。有的使用本地記憶體作為緩存,有的使用本地硬碟作為緩存,有的使用緩存伺服器。但是無論使用哪種緩存,介面中的方法都是差不多。筆者最近的項目使用的是memcached作為緩存伺服器,由於memcached的一些限制,現在想換re...
  • Optimizer+ 是 Zend 開發的閉源但可以免費使用的 PHP 優化加速組件,是第一個也是最快的 opcode 緩存工具。現在,Zend 科技公司將 Optimizer+ 在 PHP License下開源成為 Zend Opcache。Zend OPcache 通過 opcode 緩存和優化...
  • 1 #coding=utf-8 2 class Fruit:#定義一個類 3 def __init__(self,color): 4 self.color=color 5 print("fruit's color:' %s" % self.color) 6 ...
  • 2016.1.26威爾遜定理證明:若p為質數,則p可整除(p-1)!+1First : 先把奇奇怪怪的取值試驗一下 若p=2,成立; 若p=3,成立; 那麼我們就開始研究p>=5的情況Second : 我們先來證明幾個結論 設A = {2,3,4,……,p-2} 設a∈A 記B = {a,2a,3a...
  • while迴圈在迴圈剛開始時,會計算一次“布爾表達式”的值,若條件為真,執行迴圈體,而對於後來每一次額外的迴圈,都會在開始前重新計算一次。註意:語句中應有使迴圈趨向於結束的語句,否則會出現無限迴圈——“死迴圈”。迴圈結構都由一下四個結構組成:初始化、條件判斷、迴圈體、迭代。計算1+2+3+……+10...
  • stringstream ss;//一次創建多次使用,需要進行clear()操作清除流狀態標記int i=0;while (i>str;//執行後,流狀態標誌位可能會被置1,需要清除,否則影響後續操作 ss.clear();//不會出現重覆現象 cout<<str<<endl; ...
  • 題目:Automated Telephone Exchangepoj URL:http://poj.org/problem?id=4011原題如下圖:題意:就是一個三位數減去兩個小於或等於99的數的差為0,滿足這個條件的數的個數。只要用標準輸入輸出就可以了。下麵是我Accepted的代碼: 1 #i...
  • /*首先~命名空間的存在是為瞭解決 引用不同類中命名衝突問題的*//*1.定義命名空間*/ namespace My; class A{}; namespace Your; class A{}; /*2.在同一個項目中引用命名空間*/ namespace My; class A{};...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...