2015-05-17 3 views
7

Ich zeichne Daten auf einer Grundkarte der Ostküste der USA und Kanada durch Matplotlib. Zusätzlich zu der Basisschicht (einem gefüllten Konturdiagramm) überlagerte ich ein Shapefile dieser Fokusregion auf den Daten unter Verwendung von Matplotlibs readshapefile-Werkzeug.Maskenbereich außerhalb der importierten Shapefile (Grundkarte/Matplotlib)

Ich frage mich, wie ich alle gerasterten Daten außerhalb der Shape-Datei maskieren kann. Natürlich kann ich durch Matplotlib einen Maskocean-Befehl ausführen, aber ich würde immer noch die gefüllten Konturen westlich des St. Lawrence haben. Kann jemand jetzt wie das? Ich hatte nicht viel Glück, online zu suchen.

def make_map(lon,lat,param): 
    fig, ax = plt.subplots() 
    ax.axis('off') 
    x1 = -83. 
    x2 = -57. 
    y1 = 37. 
    y2 = 50. 
    projection='merc' 
    resolution='h' 
    m = Basemap(projection=projection, llcrnrlat=y1, urcrnrlat=y2, llcrnrlon=x1, 
       urcrnrlon=x2, resolution=resolution) 
    x,y = m((lon-360.),lat) 
    m.ax = ax 
    my_cmap = cm.get_cmap('coolwarm') 
    pp = m.contourf(x, y, param, 30, cmap=my_cmap, extend='both') 
    m.drawmapscale(-67, 39.5, -70, 43.5, 500, fontsize=8, barstyle='fancy') 
    return fig, m, x, y 

def drawstates(ax, shapefile='../StateProv_UTMrp'): 
     shp = m.readshapefile(shapefile, 'states',zorder = 1, drawbounds=True) 
     for nshape, seg in enumerate(m.states): 
      poly = Polygon(seg, facecolor='w',alpha=0.0, edgecolor='k') 
      ax.add_patch(poly) 

fig, m, x, y = make_map(lon, lat, param) 
drawstates(m.ax) 

Antwort