[英]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.