Choropleth map

The pygmt.Figure.plot method allows us to plot geographical data such as polygons which are stored in a geopandas.GeoDataFrame object. Use geopandas.read_file to load data from any supported OGR format such as a shapefile (.shp), GeoJSON (.geojson), geopackage (.gpkg), etc. You can also use a full URL pointing to your desired data source. Then, pass the class:geopandas.GeoDataFrame as an argument to the data parameter of pygmt.Figure.plot, and style the geometry using the pen parameter. To fill the polygons based on a corresponding column you need to set fill="+z" as well as select the appropriate column using the aspatial parameter as shown in the example below.

import geodatasets
import geopandas as gpd
import pygmt

# Read the example dataset provided by geodatasets.
gdf = gpd.read_file(geodatasets.get_path("geoda airbnb"))
print(gdf)
Downloading file 'airbnb.zip' from 'https://geodacenter.github.io/data-and-lab//data/airbnb.zip' to '/home/runner/.cache/geodatasets'.
          community  ...                                           geometry
0           DOUGLAS  ...  POLYGON ((-87.60914 41.84469, -87.60915 41.844...
1           OAKLAND  ...  POLYGON ((-87.59215 41.81693, -87.59231 41.816...
2       FULLER PARK  ...  POLYGON ((-87.6288 41.80189, -87.62879 41.8017...
3   GRAND BOULEVARD  ...  POLYGON ((-87.60671 41.81681, -87.6067 41.8165...
4           KENWOOD  ...  POLYGON ((-87.59215 41.81693, -87.59215 41.816...
..              ...  ...                                                ...
72  MOUNT GREENWOOD  ...  POLYGON ((-87.69646 41.70714, -87.69644 41.706...
73      MORGAN PARK  ...  POLYGON ((-87.64215 41.68508, -87.64249 41.685...
74            OHARE  ...  MULTIPOLYGON (((-87.83658 41.9864, -87.83658 4...
75        EDGEWATER  ...  POLYGON ((-87.65456 41.99817, -87.65456 41.998...
76      EDISON PARK  ...  POLYGON ((-87.80676 42.00084, -87.80676 42.000...

[77 rows x 21 columns]
fig = pygmt.Figure()

fig.basemap(
    region=gdf.total_bounds[[0, 2, 1, 3]],
    projection="M6c",
    frame="+tPopulation of Chicago",
)

# The dataset contains different attributes, here we select the "population" column to
# plot.

# First, we define the colormap to fill the polygons based on the "population" column.
pygmt.makecpt(
    cmap="acton",
    series=[gdf["population"].min(), gdf["population"].max(), 10],
    continuous=True,
    reverse=True,
)

# Next, we plot the polygons and fill them using the defined colormap. The target column
# is defined by the aspatial parameter.
fig.plot(
    data=gdf,
    pen="0.3p,gray10",
    fill="+z",
    cmap=True,
    aspatial="Z=population",
)

# Add colorbar legend.
fig.colorbar(frame="x+lPopulation", position="jML+o-0.5c+w3.5c/0.2c")

fig.show()
choropleth map

Total running time of the script: (0 minutes 0.616 seconds)

Gallery generated by Sphinx-Gallery