首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用matplotlib和pygrib在shapefile上覆盖降水数据?

如何使用matplotlib和pygrib在shapefile上覆盖降水数据?
EN

Stack Overflow用户
提问于 2016-07-18 05:33:42
回答 1查看 907关注 0票数 0

我读过这个问题-- Overlay shape file on matplotlib和我不确定它是否适用于我,但是我有一个我的国家的shapefile,我想将GRIB文件中的降水数据覆盖到那个shapefile中。这是使用pygrib和matplotlib。我对使用Basemap.coastlines()和Basemap.countries()不感兴趣,因为这在shapefile中是可用的。我想用我自己的档案覆盖它。我该怎么做?

代码语言:javascript
复制
#!/usr/bin/python3.4
import numpy as np
import pygrib
import shapefile
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap


grbs = pygrib.open('00020000')

grb = grbs.select(name='Total Precipitation')[0]
data = grb.values
lat,lon = grb.latlons()
m=Basemap(projection='mill',lat_ts=10,llcrnrlon=lon.min(), \
urcrnrlon=lon.max(),llcrnrlat=lat.min(),urcrnrlat=lat.max(), \
resolution='c')
m.readshapefile("adm3.shp")
x,y=m(lon,lat)
cs = m.pcolormesh(x,y,data,shading='flat',cmap=plt.cm.jet)


m.drawparallels(np.arange(-90.,80.,5.),labels=[1,0,0,0])
m.drawmeridians(np.arange(-180.,180.,5.),labels=[0,0,0,1])
plt.colorbar(cs,orientation='vertical')
plt.title('Precipitation Plot')
plt.show()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-18 07:35:06

我不确定我是否理解,因为您的代码似乎基本上是有效的。我做了几处改变:

  • resolution kwarg在Basemap中可以设置为None,因为您不会使用内置的海岸线。
  • m.readshapefile需要一个name参数

使用

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

grbs = pygrib.open('00020000.grb')
grb = grbs.select(name='Total Precipitation')[0]
data = grb.values
lat, lon = grb.latlons()

m = Basemap(projection='mill', lat_ts=10,
            llcrnrlon=lon.min(),
            urcrnrlon=lon.max(),
            llcrnrlat=lat.min(),
            urcrnrlat=lat.max(),
            resolution=None)

m.readshapefile("adm3", "countryname", color="red", linewidth=3)
x, y = m(lon,lat)
cs = m.pcolormesh(x,y,data,shading='flat',cmap=plt.cm.jet)

m.drawparallels(np.arange(-90.,80.,5.),labels=[1,0,0,0])
m.drawmeridians(np.arange(-180.,180.,5.),labels=[0,0,0,1])
plt.colorbar(cs,orientation='vertical')
plt.title('Precipitation Plot')
plt.show()

一些模拟数据和国家边界,我得到的数字如下:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38429211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档