簡體   English   中英

帶有matplotlib的netCDF數據的怪異圖

[英]Weird plot for netCDF data with matplotlib

我一直在尋找可悲的長時間,因此,我將不勝感激。

我正在嘗試在南極海中繪制一些海冰干舷數據(netCDF,網格總干舷),但是應該很好地繪制在南極周圍的數據位於圖像的底部。 NetCDF和matplotlib對我來說還很新,因此錯誤可能出在例如處理尺寸或投影時。

from scipy.io.netcdf import netcdf_file as Dataset
import numpy as np
import matplotlib.pyplot as plt

FB = Dataset('./datasets/fb-0217-0320.nc', 'r')
f = FB.variables['f'][:,:]
lat = FB.variables['lat'][:,0]
lon = FB.variables['lon'][0,:]
masked_fb = np.ma.masked_where(np.isnan(f), f)
mtx_lon, mtx_lat = np.meshgrid(lon, lat)
m = Basemap(projection='spstere',boundinglat=-50, lon_0=180., resolution='l')
m.bluemarble()

plt.figure()
m.pcolormesh(mtx_lon, mtx_lat, masked_fb, latlon=True)
plt.show()

ncdump給出:

dimensions:
x = 79 ;
y = 83 ;
variables:
float lat(y, x) ;
    lat:standard_name = "latitude" ;
    lat:long_name = "latitude coordinate" ;
    lat:units = "degrees_north" ;
float lon(y, x) ;
    lon:standard_name = "longitude" ;
    lon:long_name = "longitude coordinate" ;
    lon:units = "degrees_east" ;
float f(y, x) ;
    f:long_name = "total_freeboard" ;
    f:units = "mm" ;
    f:coordinates = "lat lon" ;

我注意到的一件奇怪的事是最小緯度為-5156.6201,但我不知道如何計算其中的多少...

編輯:如尼爾建議的那樣,將代碼格式化為適合通用的方式。

好的,我從matplotlib獲得幫助,並認為如果其他人有時也遇到類似的問題,我應該在這里分享。 問題出在網格上。 由於netCDF文件中的緯度和經度已經是2D格式,因此不需要網格。 對我有用的解決方案是:

from scipy.io.netcdf import netcdf_file as Dataset
import numpy as np
import matplotlib.pyplot as plt

FB = Dataset('./datasets/fb-0217-0320.nc', 'r')
f = FB.variables['f'][:,:]
lat = FB.variables['lat'][:,:]
lon = FB.variables['lon'][:,:]
masked_fb = np.ma.masked_where(np.isnan(f), f)
m = Basemap(projection='spstere',boundinglat=-50, lon_0=180., resolution='l')
m.bluemarble()

plt.figure()
m.pcolormesh(lon, lat, masked_fb, latlon=True)
plt.show()

首先,通常的做法是將netcdf模塊讀為

from scipy.io.netcdf import netcdf_file as Dataset

然后,您可以讀取文件並以以下方式訪問變量

FB = Dataset('./datasets/fb-0217-0320.nc', 'r')
f = FB.variables['f'][:,:]
lat = FB.variables['lat'][:,:]
lon = FB.variables['lon'][:,:]

您確定lat[:,0]lon[0,:]在網格坐標中正確讀取嗎? ncdump表示它們是2D變量,我懷疑問題是根據lat[:,0]lon[0,:]創建了一個網meshgrid

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM