2015-05-17 34 views
7

Wykreślam dane na mapie bazowej wschodniego wybrzeża Stanów Zjednoczonych i Kanady przez Matplotlib. Oprócz warstwy bazowej (wypełniony wykres warstwic) nakładałem plik kształtu tego obszaru ogniskowania na dane za pomocą narzędzia readfapefile Matplotlib.Obszar maski poza importowanym shapefile (mapa bazowa/matplotlib)

Zastanawiam się w jaki sposób można zamaskować wszystkie dane siatkowe poza shapefile. Mogę oczywiście wykonać polecenie maskocean przez Matplotlib, ale nadal pozostaną mi wypełnione kontury na zachód od Świętego Wawrzyńca. Czy ktoś może teraz to zrobić? Nie miałem szczęścia szukać w Internecie.

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) 

Odpowiedz