用Python绘制netCDF数据:如何更改网格?
我是python的新手,使用Matplotlib绘制数据。我真的需要帮助,提前谢谢你的回答 因此,我有一个netCDF文件,其中包含风数据的v分量。栅格坐标:点=9600(240x40) 伦敦:0至358.5乘1.5度东环线 纬度:北纬88.5度至30度-1.5度 我的代码是:用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
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)
从图中可以看出差异(我仍然无法发布图像)。
是的,你完全正确。但是我想创建一个脚本,该脚本适合于显示具有相同结构的大量文件,而无需花费时间格式化文件本身。我已经找到了解决办法。非常感谢你的回答!