2016-07-18 21 views
0

Ich habe diese Frage-Overlay shape file on matplotlib gelesen und bin mir nicht sicher, dass es für mich gilt, aber ich habe ein Shapefile meines Landes und ich möchte die Niederschlagsdaten aus einer GRIB-Datei auf diese Shapefile überlagern. Dies verwendet pygrib und matplotlib. Ich bin nicht daran interessiert, Basemap.coastlines() und Basemap.countries() zu verwenden, da dies im Shapefile verfügbar ist. Ich möchte das mit meiner eigenen Shapefile überschreiben. Wie mache ich das ?Wie überlagern Sie Niederschlagsdaten mit Matplotlib und Pygrib in einem Shapefile?

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

Antwort

1

Ich bin mir nicht sicher, ob ich verstehe, weil Ihr Code im Grunde funktioniert. Ich habe ein paar Änderungen:

  • resolution kwarg in Basemap kann None eingestellt werden, weil Sie nicht die eingebaute in verwenden Küsten
  • m.readshapefile erfordert ein name Argument

Mit

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

und einige verspottete Daten und Ländergrenzen, bekomme ich eine Figur wie die folgende: mocked precipitation map