我是python中的新人,并使用Matplotlib绘制数据。我真的需要帮助,并提前感谢您的答案。
所以,我有一个带有风数据v分量的netCDF文件。网格坐标:点= 9600(240x40)
lon:0到358.5乘1.5度_圆形
lat:88.5到30 by -1.5 degrees_north
我的代码是:
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)之间没有数据。
问题是:如何更改网格的大小,重新格式化,插入数据或其他内容以便不使用此白色扇区?
答案 0 :(得分:1)
我找到了解决方案。在脚本的开头,您必须添加
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
答案 1 :(得分:0)
答案 2 :(得分:0)
简单的答案是360度是0度,所以你可以复制0度数据,它应该看起来正确。我可能正在解释这个错误,因为我认为数据代表每个点的压力水平,而不是两点之间(即零度,不是零度和1.5度之间)。
我的解释意味着,是的,您没有358.5和0之间的数据,但您也没有357和358.5之间的数据。这似乎比跳过某个区域更有可能。这意味着来自358.5的数据应该触及0中的数据,因为它距离触及的1.5是0。
复制最后一位会使您能够将m.pcolor调用更改为imshow调用(如Roman Dryndik's link中所述),并使用插值来平滑图表。