예제 #1
0
def polar_stere(lon_w, lon_e, lat_s, lat_n, **kwargs):
    '''Returns a Basemap object (NPS/SPS) focused in a region.

    lon_w, lon_e, lat_s, lat_n -- Graphic limits in geographical coordinates.
                                  W and S directions are negative.
    **kwargs -- Aditional arguments for Basemap object.

    '''
    lon_0 = lon_w + (lon_e - lon_w) / 2.
    ref = lat_s if abs(lat_s) > abs(lat_n) else lat_n
    lat_0 = math.copysign(90., ref)
    proj = 'npstere' if lat_0 > 0 else 'spstere'
    prj = basemap.Basemap(projection=proj,
                          lon_0=lon_0,
                          lat_0=lat_0,
                          boundinglat=0,
                          resolution='c')
    #prj = pyproj.Proj(proj='stere', lon_0=lon_0, lat_0=lat_0)
    lons = [lon_w, lon_e, lon_w, lon_e, lon_0, lon_0]
    lats = [lat_s, lat_s, lat_n, lat_n, lat_s, lat_n]
    x, y = prj(lons, lats)
    ll_lon, ll_lat = prj(min(x), min(y), inverse=True)
    ur_lon, ur_lat = prj(max(x), max(y), inverse=True)
    return basemap.Basemap(projection='stere',
                           lat_0=lat_0,
                           lon_0=lon_0,
                           llcrnrlon=ll_lon,
                           llcrnrlat=ll_lat,
                           urcrnrlon=ur_lon,
                           urcrnrlat=ur_lat,
                           **kwargs)
def drawmaps(ax,
             lat_mn,
             lon_mn,
             lat_mx,
             lon_mx,
             swath_lon,
             swath_lat,
             proj=None,
             gvmap=False):
    #lat_mn, lat_mx : integers
    #proj : "cyl" and "ortho"
    if proj == None:
        proj = 'ortho'
    if proj == 'cyl':
        mapproj = bm.Basemap(ax=ax,projection='cyl',llcrnrlat= lat_mn, \
            llcrnrlon= lon_mn,urcrnrlat= lat_mx, urcrnrlon= lon_mx)
    elif proj == 'ortho':
        lon_0 = lon_mn + (lon_mx - lon_mn) / 2
        lat_0 = lat_mn + (lat_mx - lat_mn) / 2
        #lower right and upper right
        m1 = bm.Basemap(projection='ortho',
                        lon_0=lon_0,
                        lat_0=lat_0,
                        resolution=None)
        #
        xp0, yp0 = m1(lon_0, lat_0)
        #
        xp1, yp1 = m1(swath_lon[0, 0], swath_lat[0, 0])
        xp2, yp2 = m1(swath_lon[0, -1], swath_lat[0, -1])
        xp3, yp3 = m1(swath_lon[-1, -1], swath_lat[-1, -1])
        xp4, yp4 = m1(swath_lon[-1, 0], swath_lat[-1, 0])

        llx = min(xp1, xp2, xp3, xp4) - xp0  # lower left
        lly = min(yp1, yp2, yp3, yp4) - yp0

        urx = max(xp1, xp2, xp3, xp4) - xp0  # upper right
        ury = max(yp1, yp2, yp3, yp4) - yp0
        mapproj = bm.Basemap(ax=ax,projection='ortho',lon_0=lon_0,\
            lat_0=lat_0,resolution='l',llcrnrx=llx,llcrnry=lly,\
            urcrnrx=urx,urcrnry=ury)
    else:
        print('Only ortho or cyl projections!!')
    lonproj, latproj = mapproj(swath_lon, swath_lat)
    latlines = np.arange(lat_mn, lat_mx, 5.0)
    lonlines = np.arange(lon_mn, lon_mx, 10.0)

    mapproj.drawcoastlines()
    mapproj.drawparallels(latlines, labels=[1, 0, 0, 0])
    mapproj.drawmeridians(lonlines, labels=[0, 0, 0, 1])
    ax.patch.set_color('gray')

    if gvmap:
        return lonproj, latproj, mapproj
    else:
        return lonproj, latproj
def rgbproj(lon_mn, lon_mx, lat_mn, lat_mx, swath_lat, swath_lon, red, green,
            blue, ax):

    lon_0 = lon_mn + (lon_mx - lon_mn) / 2
    lat_0 = lat_mn + (lat_mx - lat_mn) / 2
    #lower right and upper right
    m1 = bm.Basemap(projection='ortho',
                    lon_0=lon_0,
                    lat_0=lat_0,
                    resolution=None)
    xp0, yp0 = m1(lon_0, lat_0)
    xp1, yp1 = m1(swath_lon[0, 0], swath_lat[0, 0])
    xp2, yp2 = m1(swath_lon[0, -1], swath_lat[0, -1])
    xp3, yp3 = m1(swath_lon[-1, -1], swath_lat[-1, -1])
    xp4, yp4 = m1(swath_lon[-1, 0], swath_lat[-1, 0])

    llx = min(xp1, xp2, xp3, xp4) - xp0  # lower left
    lly = min(yp1, yp2, yp3, yp4) - yp0

    urx = max(xp1, xp2, xp3, xp4) - xp0  # upper right
    ury = max(yp1, yp2, yp3, yp4) - yp0

    #    m = bm.Basemap(projection='cyl',lon_0=lon_0,lat_0=lat_0,resolution='l',\
    #        llcrnrlon=lon_mn,llcrnrlat=lat_mn,urcrnrlon=lon_mx,urcrnrlat=lat_mx,\
    #        llcrnrx=llx,llcrnry=lly,urcrnrx=urx,urcrnry=ury)
    m = bm.Basemap(ax=ax,projection='ortho',lon_0=lon_0,lat_0=lat_0,resolution='l',\
        llcrnrx=llx,llcrnry=lly,urcrnrx=urx,urcrnry=ury)

    x_igrid, y_igrid = m(swath_lon, swath_lat)
    x_igrid = x_igrid - xp0
    y_igrid = y_igrid - yp0

    x1_igrid = x_igrid.ravel()
    y1_igrid = y_igrid.ravel()
    z_igrid_01 = red.ravel()
    z_igrid_02 = green.ravel()
    z_igrid_03 = blue.ravel()

    xy1_igrid = np.vstack((x1_igrid, y1_igrid)).T
    xi, yi = np.mgrid[llx:urx:1000j, lly:ury:1000j]

    z_01 = griddata(xy1_igrid, z_igrid_01, (xi, yi), method='linear')
    z_02 = griddata(xy1_igrid, z_igrid_02, (xi, yi), method='linear')
    z_03 = griddata(xy1_igrid, z_igrid_03, (xi, yi), method='linear')

    rgb_projected = np.zeros((1000, 1000, 3))
    rgb_projected[:, :, 0] = z_01[:, :]
    rgb_projected[:, :, 1] = z_02[:, :]
    rgb_projected[:, :, 2] = z_03[:, :]
    rgb_projected = np.rot90(np.flipud(rgb_projected), k=3)

    return m, rgb_projected
예제 #4
0
def AfrBasemap2(lat,lon,latsp,lonsp,drawstuff=False,prj='cyl', rsltn='c',\
    fontdict=False,onlyedge=False):
    '''m = SAfrBasemap(lat,lon,drawstuff=False,prj='cyl',fno=1)

    Adapted from N Hart MetBlobs SAfBasemap
    this one does not create figure "f"

    This creates a basemap instance from lat's and lon's provided.
    Specific for this application of metblobs, so currently using proj='cyl',
    however Albers equal area is here uncommented.
    USAGE: lat, lon
    RETURNS: m, basemap object pointer (handle in matlab language)'''
    xy = (lat.min(), lat.max(), lon.min(), lon.max())
    nx = len(lon)
    ny = len(lat)
    if not fontdict: fontdict = {'fontsize': 10, 'fontweight': 'normal'}
    if prj == 'cyl':
        m = bm.Basemap(llcrnrlon=xy[2],llcrnrlat=xy[0],urcrnrlon=xy[3],\
                       urcrnrlat=xy[1],resolution=rsltn,area_thresh=10000.,\
                       projection='cyl')
    if prj == 'aea':
        m = bm.Basemap(llcrnrlon=xy[2]-5.,llcrnrlat=xy[0],urcrnrlon=xy[3],\
                       urcrnrlat=xy[1]+5,resolution=rsltn,projection='aea',\
                        lat_1=-45.,lat_2=0.,lon_0=40.)

    ### SET UP FIGURE AND MERIDIANS
    delon = lonsp
    meridians = np.arange(0., 360., delon)
    delat = latsp
    circles = np.arange(0.,90.+delat,delat).tolist()+\
              np.arange(-delat,-90.-delat,-delat).tolist()

    if drawstuff:
        m.drawcoastlines()
        m.drawcountries()
        if not onlyedge:
            m.drawparallels(circles,linewidth='0.1',labels=[1,0,0,0],\
                        fontdict=fontdict)
            m.drawmeridians(meridians,linewidth='0.1',labels=[0,0,0,1],\
                        fontdict=fontdict)
        elif onlyedge == 'lat':
            m.drawparallels(circles,linewidth='0.1',labels=[1,0,0,0],\
                        fontdict=fontdict)
        elif onlyedge == 'lon':
            m.drawmeridians(meridians,linewidth='0.1',labels=[0,0,0,1],\
                        fontdict=fontdict)

    return m
def mapProject(ax,
               lat={
                   'mn': -90,
                   'mx': 90
               },
               lon={
                   'mn': -180,
                   'mx': 180
               },
               line_step={
                   'lon': 45.0,
                   'lat': 30.0
               }):
    lat_int = line_step['lat']
    lon_int = line_step['lon']

    mapproj = bm.Basemap(ax=ax,
                         projection='cyl',
                         llcrnrlat=lat['mn'],
                         llcrnrlon=lon['mn'],
                         urcrnrlat=lat['mx'],
                         urcrnrlon=lon['mx'])

    latlines = np.arange(lat['mn'], lat['mx'], lat_int)
    lonlines = np.arange(lon['mn'], lon['mx'], lon_int)

    mapproj.drawcoastlines()
    mapproj.drawparallels(latlines, labels=[1, 0, 0, 0])
    mapproj.drawmeridians(lonlines, labels=[0, 0, 0, 1])

    return mapproj
예제 #6
0
파일: wrf.py 프로젝트: piyushether/pycode
def map_peninsula (lon, lat, xvar, centerlon=-60, w=2000,h=2000, cb=False, cl=None, cbtitle=None, ec='None', ax=None, fp=None):
    from mpl_toolkits import basemap
    from matplotlib.pyplot import colorbar
    import niceplots
    
    m = basemap.Basemap(projection='lcc',lat_0=-70,lon_0=centerlon,width=w*1000,height=h*1000, resolution='i', ax=ax)
    x, y = m(lon, lat)
    if cl is None:
        pc = m.pcolormesh(x, y, xvar, edgecolors=ec)
    else:
        pc = m.pcolormesh(x, y, xvar, vmin=cl[0], vmax=cl[1], edgecolors=ec)
    m.drawmapboundary(color='grey')
    if fp:
        m.drawmeridians(np.arange(-105,-15,15), labels=[0,0,0,1], fontproperties=fp) # left, right, top, bottom
        m.drawparallels(np.arange(-90,90,10), labels=[1,0,0,0], fontproperties=fp) # left, right, top, bottom
    else:
        m.drawmeridians(np.arange(-105,-15,15), labels=[0,0,0,1]) # left, right, top, bottom
        m.drawparallels(np.arange(-90,90,10), labels=[1,0,0,0]) # left, right, top, bottom
    m.drawcoastlines(color='grey')
    
    if cb:
        cbar=colorbar(pc)
        if fp:
            niceplots.beautify_colorbar(cbar, title=cbtitle)
        else:
            if cbtitle is not None:
                cbar.set_label(cbtitle)
    
    return m, pc
예제 #7
0
def test_scalar_grid(min_lon=0.0, max_lon=np.pi, min_lat=-np.pi/2.0, max_lat=np.pi/2.0,\
                     nlats=181, nlons=181, field='tens', cmap=plt.cm.gray_r): #{{{

    satfile = "input/ConvectingEuropa_GlobalDiurnalNSR.ssrun"
    europa = ss.Satellite(open(satfile, 'r'))
    NSR = ss.StressCalc([
        ss.NSR(europa),
    ])

    the_fig = plt.figure(figsize=(10, 10))
    map_ax = the_fig.add_subplot(1, 1, 1)
    map_ax.set_title("Rasterized scalar stress field (%s)" % (field, ))
    scalar_basemap = basemap.Basemap(llcrnrlon = np.degrees(min_lon),\
                                     llcrnrlat = np.degrees(min_lat),\
                                     urcrnrlon = np.degrees(max_lon),\
                                     urcrnrlat = np.degrees(max_lat),\
                                     ax = map_ax)

    scalar_grid(stresscalc=NSR, nlons=nlons, nlats=nlats, min_lon=min_lon, max_lon=max_lon, min_lat=min_lat, max_lat=max_lat,\
                field=field, cmap=cmap, basemap_ax=scalar_basemap)

    scalar_basemap.drawmeridians(np.degrees(np.linspace(min_lon, max_lon, 7)),
                                 labels=[1, 0, 0, 1],
                                 linewidth=0.5,
                                 color='gray')
    scalar_basemap.drawparallels(np.degrees(np.linspace(min_lat, max_lat, 7)),
                                 labels=[1, 0, 0, 1],
                                 linewidth=0.5,
                                 color='gray')
    scalar_basemap.drawmapboundary()
예제 #8
0
def drawMap(ax):
    """Creates basemap with standard properties.
	
	Args:
		ax (matplotlib.axes): Axes to display plots in.
		
	Returns:
		matplotlib.basemap.basemap: Basemap.
	
	"""

    # Create basemap
    m = bm.Basemap(  #llcrnrlon=-lonMin,llcrnrlat=latMin,urcrnrlon=lonMax,urcrnrlat=latMax,
        projection='lcc',
        lat_0=45.,
        lon_0=-63.,
        resolution='l',
        area_thresh=10000.,
        ax=ax,
        suppress_ticks=True,
        width=1000 * 1E3,
        height=700 * 1E3)

    # Some settings
    m.drawcoastlines()
    m.fillcontinents(color='coral', lake_color='aqua')
    m.drawmapboundary(fill_color='aqua')
    m.drawparallels(np.arange(-80, 80, 10.))
    m.drawmeridians(np.arange(-180, 180., 10))

    return m
예제 #9
0
def plotCode(timeseries, climatology, modelID):

    years = timeseries.coord('year').points
    f = plt.figure(figsize=(15, 5))

    plt.subplot(1, 2, 1)
    plt.bar(years, timeseries.data)
    plt.xlabel('years')
    plt.ylabel('precip kg m-2 day-1')
    #plt.xlim(0, len(timeseries.data))
    plt.title('JJAS pr 5S-20N ; 18W-15E: ' + modelID)

    plt.subplot(1, 2, 2)
    levs = np.linspace(1, 20, 20)
    iplt.contourf(climatology, levs, cmap='jet_r')
    m = bm.Basemap(projection='cyl',
                   llcrnrlat=np.min(climatology.coord('latitude').points),
                   urcrnrlat=np.max(climatology.coord('latitude').points),
                   llcrnrlon=np.min(climatology.coord('longitude').points),
                   urcrnrlon=np.max(climatology.coord('longitude').points),
                   resolution='c')  # medium resolution for grid
    m.drawcoastlines(linewidth=2)
    m.drawcountries(linewidth=1)
    plt.title('JJAS mean pr (1950-2005) 5S-20N ; 18W-15E:' + modelID)
    cbar = plt.colorbar(orientation="vertical")
    cbar.set_label('precip kg m-2 day-1')
    #qplt.pcolor(climatology)
    #plt.tight_layout()
    plt.savefig(
        '/nfs/see-fs-01_teaching/earv057/metrics_workshop/Ev_To/Figures_png/' +
        modelID + 'jjas.png')
예제 #10
0
def test_scalar_lin(lin, field='tens', cmap=plt.cm.jet): #{{{

    import lineament

    satfile="input/ConvectingEuropa_GlobalDiurnalNSR.ssrun"
    europa = ss.Satellite(open(satfile,'r'))
    NSR = ss.StressCalc([ss.NSR(europa),])

    mp_lons, mp_lats = lin.seg_midpoints()
    seg_lengths = lin.seg_lengths()

    min_lat = 0
    max_lat = np.pi/2.0
    min_lon = 0.0
    max_lon = np.pi

    the_fig = plt.figure(figsize=(10,10))
    map_ax  = the_fig.add_subplot(1,1,1)
    map_ax.set_title("Point by Point scalar stresses field (%s)" % (field,) )
    scalar_basemap = basemap.Basemap(llcrnrlon = np.degrees(min_lon),\
                                     llcrnrlat = np.degrees(min_lat),\
                                     urcrnrlon = np.degrees(max_lon),\
                                     urcrnrlat = np.degrees(max_lat),\
                                     ax = map_ax)

    scalar_points(stresscalc=NSR, lons=np.mod(mp_lons,np.pi), lats=np.mod(mp_lats,np.pi/2.0), symb_sizes=5000*seg_lengths, field=field, cmap=cmap, basemap_ax=scalar_basemap)
    junk = lineament.plotlinmap([lin,], map=scalar_basemap, lat_mirror=True, lon_cyc=np.pi)

    scalar_basemap.drawmeridians(np.degrees(np.linspace(min_lon, max_lon, 7)), labels=[1,0,0,1], linewidth=0.5, color='gray')
    scalar_basemap.drawparallels(np.degrees(np.linspace(min_lat, max_lat, 7)), labels=[1,0,0,1], linewidth=0.5, color='gray')
    scalar_basemap.drawmapboundary()
예제 #11
0
    def stereographic(lat, lon, time):
        plt.figure()
    
        mapPlot = bm.Basemap(projection='npstere', boundinglat=10, lon_0=0, resolution='i')
        mapPlot.drawcoastlines()
        mapPlot.fillcontinents(color='coral', lake_color='aqua')
        mapPlot.drawparallels(np.arange(-80., 81., 20.))
        mapPlot.drawmeridians(np.arange(-180., 181., 20.))
        mapPlot.drawmapboundary(fill_color='aqua')
        
        mapPlot.plot(misc.bhv[0], misc.bhv[1], 'go', latlon=True)
        mapPlot.plot(misc.tro[0], misc.tro[1], 'go', latlon=True)
        mapPlot.plot(misc.lby[0], misc.lby[1], 'go', latlon=True)
        
        for i in range(len(lon)):
            if(time[i].month == 5):
                colour = "bo"
                mapPlot.plot(lon[i], lat[i], colour, latlon=True, mew=0.2, markersize=misc.ms)
            elif(time[i].month == 6):
                colour = "go"
                mapPlot.plot(lon[i], lat[i], colour, latlon=True, mew=0.2, markersize=misc.ms)
            elif(time[i].month == 7):
                colour = "yo"
                mapPlot.plot(lon[i], lat[i], colour, latlon=True, mew=0.2, markersize=misc.ms)
            elif(time[i].month == 8):
                colour = "co"
                mapPlot.plot(lon[i], lat[i], colour, latlon=True, mew=0.2, markersize=misc.ms)

        plt.show()
        plt.close()
예제 #12
0
def doPlotRetLevChng(ax, rlChng, lon, lat, txt, mp):
  if mp == None:
   #llcrnrlon = -11.5
   #llcrnrlat = 23
   #urcrnrlon = 44
   #urcrnrlat = 74

   #llcrnrlon = -25
   #llcrnrlat = 31
   #urcrnrlon = 37
   #urcrnrlat = 71.5

    llcrnrlon = -25
    llcrnrlat = 25
    urcrnrlon = 44
    urcrnrlat = 71.5

    mp = bm.Basemap(llcrnrlon=llcrnrlon, llcrnrlat=llcrnrlat, urcrnrlon=urcrnrlon, 
             urcrnrlat=urcrnrlat, resolution='l', projection='lcc', lon_0=-15, lat_1=-15, lat_2=10)
  plt.axes(ax)
  mp.drawcoastlines(linewidth=.25)
  pltvls = rlChng
  x, y = mp(lon, lat)
  sc = plt.scatter(x, y, s=1, c=pltvls, vmin=-40, vmax=40, linewidth=0, cmap='bwr_r')
  txtpos = mp(-22, 68)
  plt.annotate(txt, xy=txtpos, xycoords='data', xytext=txtpos, textcoords='data', fontsize=19)
  return sc, mp
예제 #13
0
def workshop_metrics_mean_temperature(Temp1, figdir):
    '''
    Inputs
     - incube : A 3D cube with time, lat and lon dimensions (iris cube)
     - figdir : An output path to write the figure to (chr string)
    Outputs
     - a nice plot of the huvmoller
    '''
    #levels=np.linspace(282,302,10)
    a = np.max(Temp1[:, :])
    b = np.min(Temp1[:, :])

    levels = np.linspace(np.amin(Temp1[:, :]), np.max(Temp1[:, :]), 13)
    #print(levs)
    print levels
    qplt.contourf(Temp1, levels=levels, extend='max')
    #fig1=qplt.contourf(Temp1, levels = levels, extend = 'max')
    #plt.clabel(fig1, inline=1)   #adds numbers to your contours
    m = bm.Basemap(projection='cyl',
                   llcrnrlat=8.0,
                   urcrnrlat=16.0,
                   llcrnrlon=-20.0,
                   urcrnrlon=20.0,
                   resolution='c')  # coarse resolution for grid
    m.drawcoastlines(linewidth=2)
    m.drawcountries(linewidth=1)
    plt.savefig(figdir + 'Tmean.png')
    plt.show()
예제 #14
0
    def plot(self):
        """Plot ra and dec"""
        m = basemap.Basemap(projection='moll', lon_0=270, resolution='c')

        # draw parallels and meridians.
        m.drawparallels(np.arange(-90., 120., 30.),
                        linewidth=0.5,
                        labels=[1, 0, 0, 0],
                        labelstyle='+/-')
        m.drawmeridians(np.arange(0., 420., 60.), linewidth=0.5)
        m.drawmapboundary()

        boundary = 90.

        ncirc = 60

        theta = np.arange(ncirc) * np.pi * 2. / np.float32(ncirc - 1)

        for (ra, dec) in zip(self.ra, self.dec):
            cra = (ra +
                   self.radius / np.cos(dec * np.pi / 180.) * np.cos(theta))
            cdec = dec + self.radius * np.sin(theta)

            nbelow = np.count_nonzero(cra < boundary)
            if (nbelow > 0):
                ibelow = np.nonzero(cra < boundary)[0]
                (xx, yy) = self._convert_radec(m, cra[ibelow], cdec[ibelow])
                plt.plot(xx, yy, linewidth=0.25, color='blue')

            nabove = np.count_nonzero(cra > boundary)
            if (nabove > 0):
                iabove = np.nonzero(cra > boundary)[0]
                (xx, yy) = self._convert_radec(m, cra[iabove], cdec[iabove])
                plt.plot(xx, yy, linewidth=0.25, color='blue')
예제 #15
0
def map(fname, source=csvfile, nlat=180, nlon=180, cmap='gist_ncar_r', cmin=0, cmax=7):
	data = getdata.read(source)
	
	Z, latedges, lonedges, binnumber = stats.binned_statistic_2d(data.Latitude, data.Longitude, data.LimitingMag, statistic=statistic, bins=(nlat, nlon))
	fig, ax = plt.subplots(figsize=(20,15))
	
	norm = colors.Normalize(vmin=cmin, vmax=cmax)
	scalar_map = cm.ScalarMappable(norm=norm, cmap=cmap)
	
	m = basemap.Basemap(projection='robin',lon_0=0,resolution='i', ax=ax)
	m.drawcoastlines(linewidth=0.2)
	m.fillcontinents(color = 'grey', lake_color = 'white')
	
	X, Y = np.meshgrid(lonedges[:-1], latedges[:-1])
	Xf = X.flatten()
	Yf = Y.flatten()
	Zf = Z.flatten()
	
	Xf = Xf[Zf<=7]
	Yf = Yf[Zf<=7]
	Zf = Zf[Zf<=7]
	color = scalar_map.to_rgba(Zf)
	
	x, y = m(Xf, Yf)
	
	for i in range(len(Zf)):
		m.plot(x[i], y[i], marker='s', ls='', color=color[i], markersize=2)
	
	scalar_map.set_array(Zf)
	cbar = plt.colorbar(scalar_map)
	cbar.ax.tick_params(labelsize=ticksize)
	
	ax.set_title('Limiting Magnitude (%s x %s)' % (nlat, nlon), fontsize=titlefont)
	fig.savefig(fname, dpi=300)
예제 #16
0
def plotMapAtTime(ncfilepath, timeIndex):
  ds = netCDF4.Dataset(ncfilepath)
  hs = ds.variables['hs'][timeIndex, :]
 #hs = ds.variables['vwnd'][timeIndex, :]
  xs = ds.variables['longitude'][:]
  ys = ds.variables['latitude'][:]
  hs[hs.mask] = 0

  tm = ds.variables['time']
  dtm = netCDF4.num2date(tm[timeIndex], tm.units, 'standard')
  print('printing for date ' + str(dtm))
  
  f = plt.figure(figsize=[12, 6])

  bm = basemap.Basemap(llcrnrlon=min(xs), llcrnrlat=min(ys), urcrnrlon=max(xs), urcrnrlat=max(ys), resolution='i')
  bm.drawcoastlines()
  mx = np.percentile(hs.flatten(), 99.5) + .6
  hs[hs > mx - .1] = mx - .1
  levels = np.arange(0., mx, .02)
  cmap = 'ocean_r'
  cf = bm.contourf(xs, ys, hs, levels, tri=True, cmap=cmap)
  cf.cmap.set_over([.5,0,0])
  plt.triplot(xs, ys, linewidth=.1, color='k')
  fc = bm.fillcontinents(color=[.8, .8, .8],lake_color=[.8, .8, .8])
  [fci.set_zorder(20) for fci in fc]
 #cf.set_clim(0, 1.6)
  cb = bm.colorbar()
  cb.ax.set_ylabel('Hs (m)', fontsize=15)
  f.tight_layout()
  plt.savefig('pltTriMed_t=' + str(timeIndex) + '.png', dpi=400)
  plt.show()
예제 #17
0
def plot_array(array, lat, lon, lat_lims, lon_lims):
    # Corners of subset map
    lat1 = lat_lims[0]
    lat2 = lat_lims[1]
    lon1 = lon_lims[0]
    lon2 = lon_lims[1]
    
    cmap = copy.copy(plt.cm.RdBu_r)
    fig = plt.figure(figsize=(10,5))
    ax = fig.add_subplot(111)
    m = basemap.Basemap(projection='mill',
                        llcrnrlat=lat1, urcrnrlat=lat2,
                        llcrnrlon=lon1, urcrnrlon=lon2,
                        lat_ts=20, resolution='c')
    lons1, lats1 = np.meshgrid(lon, lat)
    x, y = m(lons1, lats1)
    m.drawcoastlines()
    ds_new = maskoceans(lons1, lats1, array)
    levels = np.linspace(-0.5, 0.5, 11)
    cs = m.contourf(x, y, ds_new, levels=levels, cmap=cmap, extend='both')
    plt.colorbar(cs, orientation='vertical', pad=0.05)
    
    title = ("Zeng's gamma")
    ax.set_title(title)
        
    path = str(os.getcwd()) + '/'
    print(path)
    today = datetime.today()
    date = today.strftime("_%d.%m.%Y")
    fname = 'zengs_gamma' + date + '.png'
    plt.savefig(path+fname, dpi=300, bbox_inches='tight')
예제 #18
0
def plotSigma(ax, sigma, mp, txt, txt2='', sigmamax=30):
    if mp == None:
        #llcrnrlon = -11.5
        #llcrnrlat = 23
        #urcrnrlon = 44
        #urcrnrlat = 74
        llcrnrlon = -25
        llcrnrlat = 31
        urcrnrlon = 37
        urcrnrlat = 71.5
        mp = bm.Basemap(llcrnrlon=llcrnrlon,
                        llcrnrlat=llcrnrlat,
                        urcrnrlon=urcrnrlon,
                        urcrnrlat=urcrnrlat,
                        resolution='l',
                        projection='lcc',
                        lon_0=-15,
                        lat_1=-15,
                        lat_2=10)

    lon, lat = estimateChngSignificanceAndRobustness.getLonLat()
    #lon, lat = lon.transpose(), lat.transpose()
    x, y = mp(lon, lat)

    plt.axes(ax)
    mp.drawcoastlines(linewidth=.25)
    mp.fillcontinents(color=[.95, .95, .95],
                      lake_color=[.95, .95, .95],
                      zorder=0)

    absSigma_ = np.abs(sigma)
    absSigma = bm.maskoceans(lon, lat, absSigma_)
    #pcl = mp.scatter(x.flatten(), y.flatten(), .07, c=absSigma.flatten(), cmap='Oranges', alpha=1, vmin=0, vmax=sigmamax)
    pcl = mp.pcolor(x,
                    y,
                    absSigma,
                    cmap='Oranges',
                    alpha=1,
                    vmin=0,
                    vmax=sigmamax)

    txtpos = mp(-21, 69.5)
    plt.annotate(txt,
                 xy=txtpos,
                 xycoords='data',
                 xytext=txtpos,
                 textcoords='data',
                 fontsize=13)

    if txt2 != '':
        txtpos = mp(-17, 67.5)
        plt.annotate(txt2,
                     xy=txtpos,
                     xycoords='data',
                     xytext=txtpos,
                     textcoords='data',
                     fontsize=14,
                     weight='bold')

    return pcl, mp
예제 #19
0
def figmap2(lon, lat, lonmin, lonmax, latmin, latmax, res, fsize):

    m = bm.Basemap(projection='merc',
                   llcrnrlat=latmin,
                   llcrnrlon=lonmin,
                   urcrnrlat=latmax,
                   urcrnrlon=lonmax,
                   resolution=res)
    x, y = m(lon, lat)
    m.drawparallels(np.arange(10 * np.floor(lat.min() / 10),
                              10 * np.ceil(lat.max() / 10), 10.),
                    labels=[True, False, False, False],
                    fontsize=fsize,
                    linewidth=0.15)
    m.drawmeridians(np.arange(10 * np.floor(lon.min() / 10),
                              10 * np.ceil(lon.max() / 10), 10.),
                    labels=[False, False, False, True],
                    fontsize=fsize,
                    linewidth=0.15)
    m.fillcontinents(color='grey')

    #plt.xlabel('Longitude',labelpad=20)
    #plt.ylabel('Latitude',labelpad=40)

    return m, x, y
예제 #20
0
def plotRelChngDiff(ax, relChngDiff, mp, txt, cmap='RdBu', vmax=20, vmin=None):
  if mp == None:
    llcrnrlon = -11.5
    llcrnrlat = 23
    urcrnrlon = 44
    urcrnrlat = 74
    mp = bm.Basemap(llcrnrlon=llcrnrlon, llcrnrlat=llcrnrlat, urcrnrlon=urcrnrlon, 
             urcrnrlat=urcrnrlat, resolution='l')

  lon, lat = estimateChngSignificanceAndRobustness.getLonLat()
  lon, lat = lon.transpose(), lat.transpose()

  plt.axes(ax)
  mp.drawcoastlines(linewidth=.25)
  mp.fillcontinents(color=[.95, .95, .95], lake_color=[.95, .95, .95], zorder=0)
 #mp.drawparallels(np.arange(-180, 180, 10), labels=[1,1])
 #mp.drawmeridians(np.arange(-90, 90, 10), labels=[1,1])
  pcl = mp.pcolor(lon, lat, relChngDiff*100, cmap=cmap)
  vmin = -vmax if vmin is None else vmin
  plt.clim(vmin, vmax)
  print('mean absolute change: ' + str(np.nanmean(np.abs(relChngDiff)*100)) + '%')

  txtpos = mp(-7, 25)
  plt.annotate(txt, xy=txtpos, xycoords='data', xytext=txtpos, textcoords='data', fontsize=13)

  return pcl, mp
예제 #21
0
def plot_current_field(uin, vin, lons, lats):
    plt.subplot()
    # Create map
    m = basemap.Basemap(projection='cyl',
                        resolution='c',
                        llcrnrlat=-90.,
                        urcrnrlat=90.,
                        llcrnrlon=-180.,
                        urcrnrlon=180.)
    m.drawcoastlines()
    m.drawparallels(np.arange(-90., 90., 30.),
                    labels=[1, 0, 0, 0],
                    fontsize=10)
    m.drawmeridians(np.arange(-180., 180., 30.),
                    labels=[0, 0, 0, 1],
                    fontsize=10)

    # Transform vector and coordinate data
    vec_lon = uin.shape[1] // 10
    vec_lat = uin.shape[0] // 10
    u_rot, v_rot, x, y = m.transform_vector(uin,
                                            vin,
                                            lons,
                                            lats,
                                            vec_lon,
                                            vec_lat,
                                            returnxy=True)

    # Create vector plot on map
    vec_plot = m.quiver(x, y, u_rot, v_rot, scale=50, width=0.002)
    plt.quiverkey(vec_plot, 0.2, -0.2, 1, '1 knot', labelpos='W')
예제 #22
0
def plot_points(data_path: str, map_margin, area_threshold, fname) -> None:
    # load data
    data = pd.read_csv(data_path, sep=";")

    # get longitudes and latitudes
    longitude = data.iloc[:, 0].values
    latitude = data.iloc[:, 1].values

    # get maxmial an minimal values
    max_long = max(longitude)
    min_long = min(longitude)
    max_lati = max(latitude)
    min_lati = min(latitude)

    # create map
    map_fragment = basemap.Basemap(
        projection="merc",
        llcrnrlon=min_long - map_margin,
        llcrnrlat=min_lati - map_margin,
        urcrnrlon=max_long + map_margin,
        urcrnrlat=max_lati + map_margin,
        resolution="h",
        area_thresh=area_threshold,
    )

    map_fragment.drawcoastlines()
    map_fragment.drawcountries()
    map_fragment.drawstates()

    lons, lats = map_fragment(longitude, latitude)

    plt.scatter(lons, lats, marker="o", color="Red", s=1)
    plt.savefig(fname=fname, dpi=300)
    plt.clf()
예제 #23
0
def plot_FuncNd(cube2plot, figpath, mnth, nlevc, xstart, xend, ystart, yend,
                title_name):
    #    pdb.set_trace()
    #    print cube2plot.collapsed(['time', 'latitude','longitude'],iris.analysis.MIN), nlevc
    #levels = np.linspace(iris.analysis.MIN(cube2plot),iris.analysis.MAX(cube2plot) , nlevc)
    plt.clf()
    #levels=np.linspace(282,302,nlevc)
    levels = np.linspace(0, 360, nlevc)
    #a = np.max(cube2plot[:,:])
    #b = np.min(cube2plot[:,:])
    #levs = np.linspace(b, a, n)
    qplt.contourf(cube2plot, levels=levels, extend='max')
    m = bm.Basemap(projection='cyl',
                   llcrnrlat=ystart,
                   urcrnrlat=yend,
                   llcrnrlon=xstart,
                   urcrnrlon=xend,
                   resolution='c')  # coarse resolution for grid
    #m = bm.Basemap(projection='cyl', llcrnrlat=8.0, urcrnrlat=16.0, llcrnrlon=-20.0, urcrnrlon=20.0, resolution='c')  # coarse resolution for grid

    m.drawcoastlines(linewidth=2)
    m.drawcountries(linewidth=1)
    plt.title(title_name)
    if not os.path.exists(figpath):
        os.makedirs(figpath)

    plt.savefig(figpath + 'Nb_of_day_year' + str(mnth + 1) + '.png')
    plt.show()


#if __name__== '__main__':
#    plot_Func(cube2plot,outpath,mnth,nlevc)
#plot_Func(cube2plot,outpath,mnth,nlevc,xstart,xend,ystart,yend)
예제 #24
0
def plotPvalue(ax, pValue, relChngDiff, mp, txt):
    if mp == None:
        llcrnrlon = -11.5
        llcrnrlat = 23
        urcrnrlon = 44
        urcrnrlat = 74
        mp = bm.Basemap(llcrnrlon=llcrnrlon,
                        llcrnrlat=llcrnrlat,
                        urcrnrlon=urcrnrlon,
                        urcrnrlat=urcrnrlat,
                        resolution='l')

    lon, lat = estimateChngSignificanceAndRobustness.getLonLat()
    lon, lat = lon.transpose(), lat.transpose()

    plt.axes(ax)
    mp.drawcoastlines(linewidth=.25)

    pvl_ = pValue.copy()
    pvl_[pvl_ > .5] = np.nan
    #pvl_[relChngDiff <= 0] = pvl_[relChngDiff <= 0] - 1
    #pvl_[relChngDiff > 0] = 1 - pvl_[relChngDiff > 0]
    #pcl = mp.pcolor(lon, lat, pvl_, cmap='Spectral')
    #pcl = mp.pcolor(lon, lat, pvl_, cmap='hot', vmin=0, vmax=.5)

    txtpos = mp(-7, 27)
    plt.annotate(txt,
                 xy=txtpos,
                 xycoords='data',
                 xytext=txtpos,
                 textcoords='data',
                 fontsize=13)

    return pcl, mp
def doPlotMinDisFreq(ax, futRp, lon, lat, txt, mp):
  if mp == None:
   #llcrnrlon = -11.5
   #llcrnrlat = 23
   #urcrnrlon = 44
   #urcrnrlat = 74

   #llcrnrlon = -25
   #llcrnrlat = 31
   #urcrnrlon = 37
   #urcrnrlat = 71.5

    llcrnrlon = -25
    llcrnrlat = 25
    urcrnrlon = 44
    urcrnrlat = 71.5

    mp = bm.Basemap(llcrnrlon=llcrnrlon, llcrnrlat=llcrnrlat, urcrnrlon=urcrnrlon, 
             urcrnrlat=urcrnrlat, resolution='l', projection='lcc', lon_0=-15, lat_1=-15, lat_2=10)
  plt.axes(ax)
  mp.drawcoastlines(linewidth=.25)
  pltvls = np.zeros(futRp.shape)*np.nan
  pltvls[futRp <= 20] = 1
  pltvls[np.logical_and(futRp > 20, futRp <= 40)] = 2
  pltvls[np.logical_and(futRp > 40, futRp <= 70)] = 3
  pltvls[np.logical_and(futRp > 70, futRp <= 100)] = 4
  pltvls[np.logical_and(futRp > 100, futRp <= 150)] = 5
  pltvls[np.logical_and(futRp > 150, futRp <= 250)] = 6
  pltvls[np.logical_and(futRp > 250, futRp <= 400)] = 7
  pltvls[futRp > 400] = 8
  x, y = mp(lon, lat)
  sc = plt.scatter(x, y, s=1, c=pltvls, vmin=1, vmax=8, linewidth=0, cmap='bwr')
  txtpos = mp(-22, 68)
  plt.annotate(txt, xy=txtpos, xycoords='data', xytext=txtpos, textcoords='data', fontsize=19)
  return sc, mp
예제 #26
0
def doPlotAreaMap(ax, chng, mp):
  if mp == None:
   #llcrnrlon = -11.5
   #llcrnrlat = 23
   #urcrnrlon = 44
   #urcrnrlat = 74
    llcrnrlon = -25
    llcrnrlat = 31
    urcrnrlon = 37
    urcrnrlat = 71.5
    mp = bm.Basemap(llcrnrlon=llcrnrlon, llcrnrlat=llcrnrlat, urcrnrlon=urcrnrlon, 
             urcrnrlat=urcrnrlat, resolution='l', projection='lcc', lon_0=-15, lat_1=-15, lat_2=10)

  lon, lat = getLonLat()
  lon, lat = lon.transpose(), lat.transpose()

  cnd = ~np.isnan(chng)
  lonFt, latFt = lon[cnd], lat[cnd]
  chngFt = chng[cnd]
  x, y = mp(lonFt, latFt)

  plt.axes(ax)
 #clr = 'darkblue' if positiveChanges else 'darkred'
  cmap = 'Blues' if positiveChanges else 'Reds'
  clr = chngFt.copy()
  clr[clr > .2] = .2
  plt.scatter(x, y, clr, c=clr, cmap=cmap)
  mp.drawcoastlines(linewidth=.25)
  mp.fillcontinents(color=[.95, .95, .95], lake_color=[.95, .95, .95], zorder=0)

  return mp
예제 #27
0
def plot_Func_SAT(cube2plot,figpath,mnth,nlevc,xstart,xend,ystart,yend,title_name): 
#    pdb.set_trace()
#    print cube2plot.collapsed(['time', 'latitude','longitude'],iris.analysis.MIN), nlevc
    #levels = np.linspace(iris.analysis.MIN(cube2plot),iris.analysis.MAX(cube2plot) , nlevc)
    plt.clf()
    levels=np.linspace(282,302,nlevc)
    levels=np.linspace(8,32,nlevc)

    qplt.contourf(cube2plot, levels = levels, extend = 'max')
    m = bm.Basemap(projection='cyl', llcrnrlat=ystart, urcrnrlat=yend, llcrnrlon=xstart, urcrnrlon=xend, resolution='c')  # coarse resolution for grid
    #m = bm.Basemap(projection='cyl', llcrnrlat=8.0, urcrnrlat=16.0, llcrnrlon=-20.0, urcrnrlon=20.0, resolution='c')  # coarse resolution for grid
    
    m.drawcoastlines(linewidth=2)
    m.drawcountries(linewidth=1)
    plt.title(title_name)
    if not os.path.exists(figpath):
        os.makedirs(figpath)       
    if  mnth == 0:
        plt.savefig(figpath +'Seasonal_average_DJF.png' )
        plt.show()
    if  mnth == 1:
        plt.savefig(figpath +'Seasonal_average_MAM.png' )
        plt.show()    
    if  mnth == 2:
        plt.savefig(figpath +'Seasonal_average_JJA.png' )
        plt.show()    
    if  mnth == 3:
        plt.savefig(figpath +'Seasonal_average_SON.png' )
        plt.show()
예제 #28
0
    def doPlotMinDisFreq(ax, futRp, lon, lat, txt, mp):
        if mp == None:
            #llcrnrlon = -11.5
            #llcrnrlat = 23
            #urcrnrlon = 44
            #urcrnrlat = 74

            #llcrnrlon = -25
            #llcrnrlat = 31
            #urcrnrlon = 37
            #urcrnrlat = 71.5

            llcrnrlon = -25
            llcrnrlat = 25
            urcrnrlon = 44
            urcrnrlat = 71.5

            mp = bm.Basemap(llcrnrlon=llcrnrlon,
                            llcrnrlat=llcrnrlat,
                            urcrnrlon=urcrnrlon,
                            urcrnrlat=urcrnrlat,
                            resolution='l',
                            projection='lcc',
                            lon_0=-15,
                            lat_1=-15,
                            lat_2=10)
        plt.axes(ax)
        mp.drawcoastlines(linewidth=.25)
        #pltvls = np.zeros(futRp.shape)*np.nan
        #pltvls[futRp <= 2] = 0
        #pltvls[futRp <= 4] = 1
        #pltvls[np.logical_and(futRp > 4, futRp <= 8)] = 2
        #pltvls[np.logical_and(futRp > 8, futRp <= 14)] = 3
        #pltvls[np.logical_and(futRp > 14, futRp <= 20)] = 4
        #pltvls[np.logical_and(futRp > 20, futRp <= 30)] = 5
        #pltvls[np.logical_and(futRp > 30, futRp <= 50)] = 6
        #pltvls[np.logical_and(futRp > 50, futRp <= 80)] = 7
        #pltvls[np.logical_and(futRp > 80, futRp <= 150)] = 8
        #pltvls[futRp > 150] = 9
        #x, y = mp(lon, lat)
        #sc = plt.scatter(x, y, s=1, c=pltvls, vmin=1, vmax=8, linewidth=0, cmap='bwr')
        x, y = mp(lon, lat)
        sc = plt.scatter(x,
                         y,
                         s=1,
                         c=futRp,
                         vmin=-100,
                         vmax=100,
                         linewidth=0,
                         cmap='bwr_r')

        txtpos = mp(-22, 68)
        plt.annotate(txt,
                     xy=txtpos,
                     xycoords='data',
                     xytext=txtpos,
                     textcoords='data',
                     fontsize=19)
        return sc, mp
def plotSigma(ax, sigma, relChngDiff, mp, txt, sigmamax=30, signSigmaThreshold1=1, signSigmaThreshold2=2, prcTxtTmpl='', printSignTxt=True):
  if mp == None:
   #llcrnrlon = -11.5
   #llcrnrlat = 23
   #urcrnrlon = 44
   #urcrnrlat = 74
    llcrnrlon = -25
    llcrnrlat = 31
    urcrnrlon = 37
    urcrnrlat = 71.5
    mp = bm.Basemap(llcrnrlon=llcrnrlon, llcrnrlat=llcrnrlat, urcrnrlon=urcrnrlon, 
             urcrnrlat=urcrnrlat, resolution='l', projection='lcc', lon_0=-15, lat_1=-15, lat_2=10)

  lon, lat = estimateChngSignificanceAndRobustness.getLonLat()
  lon, lat = lon.transpose(), lat.transpose()
  x, y = mp(lon, lat)

  plt.axes(ax)
  mp.drawcoastlines(linewidth=.25)
  mp.fillcontinents(color=[.95, .95, .95], lake_color=[.95, .95, .95], zorder=0)

  absSigma = np.abs(sigma)
 #pcl = mp.pcolor(lon, lat, sigma, cmap='hot_r', vmin=0, vmax=sigmamax)
 #pcl = mp.pcolor(lon, lat, sigma, cmap='Spectral_r', vmin=0, vmax=sigmamax)
 #pcl = mp.pcolor(lon, lat, sigma, cmap='coolwarm', vmin=0, vmax=sigmamax)
 #pcl = mp.pcolor(lon, lat, np.abs(sigma), cmap='RdBu_r', vmin=0, vmax=sigmamax)
 #pcl = mp.pcolor(lon, lat, absSigma, cmap='PuBu_r', vmin=0, vmax=sigmamax)
 #pcl = mp.scatter(lon.flatten(), lat.flatten(), .07, c=absSigma.flatten(), cmap='PuBu_r', alpha=1, vmin=0, vmax=sigmamax)
  pcl = mp.scatter(x.flatten(), y.flatten(), .07, c=absSigma.flatten(), cmap='Oranges', alpha=1, vmin=0, vmax=sigmamax)
 #prcTxtTmpl = '% of pixel where ${thr}\|\Delta Q_{{100-wl}}\| > \sigma_{{im}}$: {p:2.0f}%' if prcTxtTmpl == '' else prcTxtTmpl

  if prcTxtTmpl != '':
    sigma_ratio = sigma/np.abs(relChngDiff)
    percSign = float(np.nansum(sigma_ratio <= signSigmaThreshold1))/np.nansum(np.logical_not(np.isnan(sigma_ratio)))
    thrstr = '{thr:1.0f}'.format(thr=signSigmaThreshold1) if signSigmaThreshold1 != 1 else ''
    prcTxt1 = prcTxtTmpl.format(p=percSign*100, thr=thrstr)
    print(prcTxt1)
  
    percSign = float(np.nansum(sigma_ratio <= signSigmaThreshold2))/np.nansum(np.logical_not(np.isnan(sigma_ratio)))
    thrstr = '{thr:1.0f}\cdot'.format(thr=signSigmaThreshold2) if signSigmaThreshold2 != 1 else ''
    prcTxt2 = prcTxtTmpl.format(p=percSign*100, thr=thrstr)
    print(prcTxt2)
  
   #txtpos = mp(-7, 71)
    txtpos = mp(-24, 32) if printSignTxt else mp(-21, 69.5)
    plt.annotate(txt, xy=txtpos, xycoords='data', xytext=txtpos, textcoords='data', fontsize=13)
    if printSignTxt:
     #txtpos = mp(-8, 27)
      txtpos = mp(-24.3, 70.3)
      bb = {'boxstyle': 'square,pad=0', 'ec': 'none', 'fc': 'w'}
      plt.annotate(prcTxt1, xy=txtpos, xycoords='data', xytext=txtpos, textcoords='data', fontsize=10, bbox=bb)
     #txtpos = mp(-8, 24)
     #txtpos = mp(-24.3, 69.1)
     #plt.annotate(prcTxt2, xy=txtpos, xycoords='data', xytext=txtpos, textcoords='data', fontsize=10, bbox=bb)
  else:
    txtpos = mp(-24, 32)
    plt.annotate(txt, xy=txtpos, xycoords='data', xytext=txtpos, textcoords='data', fontsize=13)

  return pcl, mp
 def _getBaseMap(self, lonlims, latlims):
   if self.mp is None:
     self._print('generating basemap ...')
     mp = bm.Basemap(llcrnrlon = lonlims[0], llcrnrlat = latlims[0], urcrnrlon = lonlims[1], urcrnrlat = latlims[1], resolution = self.cstLineRes)
     self.mp = mp
   else:
     mp = self.mp
   return mp