用Python绘制netCDF数据:如何更改网格?

用Python绘制netCDF数据:如何更改网格?,python,matplotlib,Python,Matplotlib,我是python的新手,使用Matplotlib绘制数据。我真的需要帮助,提前谢谢你的回答 因此,我有一个netCDF文件,其中包含风数据的v分量。栅格坐标:点=9600(240x40) 伦敦:0至358.5乘1.5度东环线 纬度:北纬88.5度至30度-1.5度 我的代码是: import numpy as np import matplotlib matplotlib.use('Agg') from netCDF4 import Dataset from matplotlib.mlab im

我是python的新手,使用Matplotlib绘制数据。我真的需要帮助,提前谢谢你的回答

因此,我有一个netCDF文件,其中包含风数据的v分量。栅格坐标:点=9600(240x40)

伦敦:0至358.5乘1.5度东环线

纬度:北纬88.5度至30度-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")
结果,我收到了一张地图(你可以在我的dropbox文件夹中找到)

在地图上,有358.5和0(360)lon之间的白色像素,因为我没有358.5和0(360)lon之间的数据


问题是:如何更改网格的大小、重新网格、插值数据或其他内容,以避免出现白色扇区?

我认为在这种情况下,可以应用某种插值技术

退房。也有类似的问题


希望它有用。

简单的答案是360度是0度,因此您可以复制0度数据,它看起来应该是正确的。但我的解释可能是错误的,因为我认为数据代表的是每个点的压力水平,而不是两个点之间的压力水平(即零度,而不是零度和1.5度之间)

我的解释是,你没有358.5和0之间的数据,但是你也没有357和358.5之间的数据。这似乎比跳过一个区域更有可能。这意味着358.5中的数据应该与0中的数据接触,因为0与1.5中的数据接触的距离一样远


复制最后一位将使您能够将m.pcolor调用更改为调用(如中所示),并使用插值平滑图形。

我找到了一个解决方案。在脚本的开头,必须添加

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)
从图中可以看出差异(我仍然无法发布图像)。

是的,你完全正确。但是我想创建一个脚本,该脚本适合于显示具有相同结构的大量文件,而无需花费时间格式化文件本身。我已经找到了解决办法。非常感谢你的回答!