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 numpy as np
import matplotlib.pyplot as plt

import regionmask

regionmask.__version__
'0.9.0.post1.dev0+g4000597.d20220302'

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>
Name:     unnamed
overlap:  False

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>
Name:     US
overlap:  False

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 Polygon, MultiPolygon

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

US1_poly, US2_poly
(<shapely.geometry.polygon.Polygon at 0x7fd43d3bec50>,
 <shapely.geometry.polygon.Polygon at 0x7fd43d096ce0>)
USregions_poly = regionmask.Regions([US1_poly, US2_poly])

USregions_poly
<regionmask.Regions>
Name:     unnamed
overlap:  False

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