2016-07-18 16 views
0

私はこの質問-を読んだことがありますが、私には当てはまりませんが、自分の国のシェイプファイルがあり、そのシェイプファイルにGRIBファイルの降水量データを重ねたいと思っています。これはpygribとmatplotlibを使用しています。 Basemap.coastlines()とBasemap.countries()の使用には興味がありません。これは、シェイプファイルで利用できるためです。私は自分のシェイプファイルでそれを上書きしたい。それ、どうやったら出来るの ?matplotlibとpygribを使ってシェイプファイルに降水量データをオーバーレイする方法は?

#!/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() 

答えて

1

あなたのコードは基本的に動作するように見えるのでわかりません。

はあなたが使用することはありませんので、 Basemapでkwargが Noneに設定することができ
  • resolution内蔵の海岸線
  • m.readshapefile

    を使用してname引数

が必要です。私はいくつかの変更を加えました

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() 

と一部の模擬データと国境については、次のような数字が表示されます。 mocked precipitation map

関連する問題