数据不适合Basemap



当我尝试使用Grib文件中的Basemap绘制数据时,该地图不适合正在绘制的数据。我发布了下面使用的代码和下面输出图像的链接。我认为投影类型可能是个问题。我还尝试将投影制作成圆柱形,同时保持代码的其余部分不变,但这也不起作用(尽管看起来更好一点(,我还为此发布了一个输出图像的链接。也许这有助于可视化什么样的投影将适合数据?任何关于你认为可能出了问题的想法都将不胜感激。

from pprint import pprint
import pygrib
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from ncepgrib2 import Grib2Decode

file = 'hrrr.t00z.wrfsfcf00.grib2'
gr = pygrib.open(file)

msg = gr[32] #Temperature values in Kelvin
#print(Grib2Decode(msg.tostring(),gribmsg=True))#Similar to printing all info for netCDF file
Temp = msg.values
lat, lon = msg.latlons()
m=Basemap(projection='lcc',llcrnrlon=lon.min(), 
urcrnrlon=lon.max(),llcrnrlat=lat.min(),urcrnrlat=lat.max(), 
lat_0 = float(msg['latitudeOfFirstGridPointInDegrees']),lon_0 =float(msg['longitudeOfFirstGridPointInDegrees']) ,resolution='c')
x,y = m(lon,lat)

                                                                                                                                                                                                                                                                                                                    #m = Basemap(width=11297120.0,height=8959788.0,
#           resolution='c',projection='lcc',
#            lat_ts=40,lat_0=lat_0,lon_0=lon_0)

fig = plt.figure(figsize = (18.6,10.5))
cs = m.pcolormesh(x,y,(Temp-273.15)*9/5 +32,cmap = plt.cm.jet)
m.drawcoastlines()
m.drawstates()
m.drawcountries()
plt.colorbar(cs,orientation='vertical')
plt.title('Temperature F')
plt.savefig('plot')
plt.show()                                                                                           

使用lcc投影的输出图像使用圆柱形投影的输出图像链接到包含Grib文件的HRRR数据。所有这些都是完全相同的格式、投影等……所以你可以下载其中任何一个,并获得相同的结果(只是不同的温度值(

有不同的方法可以解决您的问题:

  1. 设置xlim和ylim,这是最简单的方法:
plt.xlim([min_lon, max_lon])
plt.ylim([min_lat, max_lat])
  1. 使用cfgrib+xarray直接从xarray对象进行绘图

最新更新