None

Note

This tutorial was generated from an IPython notebook that can be accessed from github.

Create your own region

Creating own regions is straightforward. Import regionmask and check the version:

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import numpy as np

import regionmask

regionmask.__version__
'0.12.1.post1.dev9+g25d7b07'

Import numpy

Assume you have two custom regions in the US, you can easily use these to create Regions:

US1 = np.array([[-100.0, 30], [-100, 40], [-120, 35]])
US2 = np.array([[-100.0, 30], [-80, 30], [-80, 40], [-100, 40]])

regionmask.Regions([US1, US2])
<regionmask.Regions 'unnamed'>
overlap:  None

Regions:
0 r0 Region0
1 r1 Region1

[2 regions]

Note

Set overlap=True if some of the regions overlap. See the tutorial on overlapping regions for details.

If you want to set the names and abbrevs yourself you can still do that:

names = ["US_west", "US_east"]
abbrevs = ["USw", "USe"]

USregions = regionmask.Regions([US1, US2], names=names, abbrevs=abbrevs, name="US")
USregions
<regionmask.Regions 'US'>
overlap:  None

Regions:
0 USw US_west
1 USe US_east

[2 regions]

Again we can plot the outline of the defined regions

ax = USregions.plot(label="abbrev")

# fine tune the extent
ax.set_extent([225, 300, 25, 45], crs=ccrs.PlateCarree())
../_images/create_own_regions_11_0.png

and obtain a mask:

import numpy as np

# define lat/ lon grid
lon = np.arange(200.5, 330, 1)
lat = np.arange(74.5, 15, -1)

mask = USregions.mask(lon, lat)
ax = plt.subplot(111, projection=ccrs.PlateCarree())

h = mask.plot(
    transform=ccrs.PlateCarree(),
    cmap="Paired",
    add_colorbar=False,
    vmax=12,
)

ax.coastlines()

# add the outlines of the regions
USregions.plot_regions(ax=ax, add_label=False)

ax.set_extent([225, 300, 25, 45], crs=ccrs.PlateCarree())
../_images/create_own_regions_14_0.png

Use shapely Polygon

You can also define the region with shapely polygons (see geopandas tutorial how to work with shapefiles).

from shapely.geometry import MultiPolygon, Polygon

US1_poly = Polygon(US1)
US2_poly = Polygon(US2)

US1_poly, US2_poly
(<POLYGON ((-100 30, -100 40, -120 35, -100 30))>,
 <POLYGON ((-100 30, -80 30, -80 40, -100 40, -100 30))>)
USregions_poly = regionmask.Regions([US1_poly, US2_poly])

USregions_poly
<regionmask.Regions 'unnamed'>
overlap:  None

Regions:
0 r0 Region0
1 r1 Region1

[2 regions]

Create Regions with MultiPolygon and interiors

Create two discontiguous regions and combine them to one. Add a hole to one of the regions

US1_shifted = US1 - (5, 0)
US2_hole = np.array([[-98.0, 33], [-92, 33], [-92, 37], [-98, 37], [-98.0, 33]])

Create Polygons, a MultiPolygon, and finally Regions

US1_poly = Polygon(US1_shifted)
US2_poly = Polygon(US2, holes=[US2_hole])

US_multipoly = MultiPolygon([US1_poly, US2_poly])

USregions_poly = regionmask.Regions([US_multipoly])
USregions_poly.plot();
../_images/create_own_regions_22_0.png

Create a mask:

mask = USregions_poly.mask(lon, lat)

and plot it:

ax = plt.subplot(111, projection=ccrs.PlateCarree())

mask.plot(transform=ccrs.PlateCarree(), add_colorbar=False)

ax.coastlines()

# fine tune the extent
ax.set_extent([225, 300, 25, 45], crs=ccrs.PlateCarree())
../_images/create_own_regions_26_0.png