[英]Plotting netCDF data with Python: How to change grid?
我是python中的新手,並使用Matplotlib繪制數據。 我真的需要幫助,在此先感謝您的回答。
因此,我有一個netCDF文件,其中包含風數據的v分量。 網格坐標:點= 9600(240x40)
lon:0到358.5 x 1.5度
緯度:88.5至30 x -1.5度
我的代碼是:
import numpy as np
import matplotlib
matplotlib.use('Agg')
from netCDF4 import Dataset
from matplotlib.mlab import griddata
from matplotlib import pyplot as plt
from mpl_toolkits.basemap import Basemap
#read data from NETcdf file ".nc"
my_file = '/home/Era-Interim/NH-EraInt-1979.nc'
fh = Dataset(my_file, mode='r')
lons = fh.variables['lon'][:]
lats = fh.variables['lat'][:]
V = fh.variables['V'][:]
V_units = fh.variables['V'].units
fh.close()
# create figure
fig = plt.figure(figsize=(20,20))
# create a map
m = Basemap(projection='nplaea',boundinglat=30,lon_0=10,resolution='l',round=True)
#draw parallels, meridians, coastlines, countries, mapboundary
m.drawcoastlines(linewidth=0.5)
m.drawcountries(linewidth=0.5)
#m.drawmapboundary(linewidth=2)
m.drawparallels(np.arange(30,90,20), labels=[1,1,0,0]) #paral in 10 degree, right, left
m.drawmeridians(np.arange(0,360,30), labels=[1,1,1,1]) #merid in 10 degree, bottom
#Plot the data on top of the map
lon,lat = np.meshgrid(lons,lats)
x,y = m(lon,lat)
cs = m.pcolor(x,y,np.squeeze(V),cmap=plt.cm.RdBu_r)
plt.title("", fontsize=25, verticalalignment='baseline')
plt.savefig("/home/Era-Interim/1.png")
結果,我收到了一張地圖(可以在我的保管箱文件夾中找到) https://www.dropbox.com/sh/nvy8wcodk9jtat0/AAC-omkPP8_7uINSSXbzImeja?dl=0
在地圖上,有358.5到0(360)lon之間的白色像素,因為我沒有358.5到0(360)lon之間的數據。
問題是:如何更改網格的大小,對其重新定義,對數據進行插值或其他操作,以便不具有此白色扇區?
我找到了解決方案。 在腳本的開頭,您必須添加
from mpl_toolkits.basemap import Basemap, addcyclic
並進一步
datain, lonsin = addcyclic(np.squeeze(Q), lons)
lons, Q = m.shiftdata(lonsin, datain = np.squeeze(Q), lon_0=180.)
print lons
lon, lat = np.meshgrid(lons, lats)
x,y = m(lon, lat)
cs = m.pcolor(x,y,datain,cmap=plt.cm.RdBu_r)
可以在圖中看到差異(我仍然無法發布圖像)。 https://www.dropbox.com/sh/nvy8wcodk9jtat0/AAC-omkPP8_7uINSSXbzImeja?dl=0
簡單的答案是360度為0度,因此您可以復制0度數據,它看起來應該正確。 不過,我可能會解釋這種錯誤,因為我認為數據代表的是每個點的壓力水平,而不是兩個點之間的壓力水平(即,零度之間,零度與1.5度之間)。
我的解釋是,是的,您沒有358.5到0之間的數據,但也沒有357到358.5之間的數據。 這似乎不僅僅是跳過區域。 這意味着來自358.5的數據應該接觸來自0的數據,因為距1.5接觸的0遠。
復制最后一位將使您能夠將m.pcolor調用更改為imshow調用(如Roman Dryndik的鏈接中所述 ),並使用插值法使圖形平滑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.