isobands
An easy way to make filled contour maps with Python.
isobands converts a regular two-dimensional
xarray raster into filled contour polygons backed by a
GeoPandas GeoDataFrame.
Install
isobands needs an installed, matching osgeo.gdal Python binding. If your
Conda or system-managed environment already provides one of the
tested baselines, install the package directly:
pip install isobands
For a pip-managed binding, first install the matching native GDAL 3.13.2
development files — the PyPI GDAL package is source-only, and without them
the build fails with gdal-config: No such file or directory — then use the
recommended newest tested and installable extra:
pip install "isobands[gdal313]"
GDAL 3.10.2, 3.11.5, and 3.12.2 remain tested compatibility choices through
the matching gdal310, gdal311, and gdal312 extras. See the installation
guide for exact versions and platform instructions.
After installation, verify the active GDAL bindings and run a small in-memory contour test:
python -m isobands check
Python callers can inspect the same structured report with isobands.check().
Use python -m isobands check --json for machine-readable output.
Quick start
import numpy as np
import xarray as xr
import isobands
data = xr.DataArray(
np.array([[0.0, 1.0, 2.0], [1.0, 2.0, 3.0], [2.0, 3.0, 4.0]]),
dims=("y", "x"),
coords={"x": [0.0, 1.0, 2.0], "y": [2.0, 1.0, 0.0]},
)
bands = isobands.from_raster(data, levels=[1.5, 2.5], crs="EPSG:4326")
print(bands[["min_value", "max_value", "geometry"]])
The result always has the stable min_value, max_value, and geometry
columns and a GeoPandas CRS. Exactly one of levels or interval is required.
Use levels for strictly increasing interior thresholds, or interval for
integral thresholds. Values equal to a threshold belong to the upper band.
Regular one-dimensional rectilinear coordinates are required, and coordinate
names do not imply a CRS. Pass crs= explicitly when metadata is absent or
ambiguous. Explicit finite nodata takes precedence over _FillValue and
missing_value; otherwise nonfinite cells are excluded. Dask-backed arrays
are materialized eagerly for GDAL's in-memory dataset. See the
guide for usage examples and the API reference.
Real-world example
The runnable NOAA/NCEP example uses the pinned
fixture in examples/data/, calls from_raster() with Kelvin levels and
EPSG:4326, checks the schema, CRS, and geometry validity, and dissolves
components with GeoPandas:
python examples/air_temperature.py
The ERA5 MapLibre example downloads the global
daily high temperature for August 16, 2020, creates five-degree Celsius
isobands, and writes GeoJSON for the accompanying
era5_maplibre.html page. It requires a
Copernicus Climate Data Store API key and the optional cdsapi, h5netcdf,
and h5py packages.
Documentation
The hosted documentation is intended for
palewi.re/docs/isobands/. The source is in
docs/, with a single-page guide covering installation, quick start,
the API reference, and the MapLibre example. Benchmarks and their
reference data remain in benchmarks/.
Metadata
Release files for isobands 0.2.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| isobands-0.2.3.tar.gz | 2.7 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| isobands-0.2.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 2.7 MB
Release files / isobands-0.2.3.tar.gz
| Download URL | isobands-0.2.3.tar.gz |
|---|---|
| Size | 2.7 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e0b4195533dd93ecc75461aa1af771681de9a7549c5e8d5283e9ab842419190a
|
|
BLAKE2b-256 checksum How to use checksums |
88c9fe03666c68ff660377e4261e3e2b743dcce6b697b9fc13221ec8b3078088
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / isobands-0.2.3-py3-none-any.whl
| Download URL | isobands-0.2.3-py3-none-any.whl |
|---|---|
| Size | 23.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4b555450393dddce34159a067cc7288aea481384510d6967a9747413fa537cd0
|
|
BLAKE2b-256 checksum How to use checksums |
f9bfbca71b226fdaaad44e7c21c93e6258870c1bf7defbb8a5f46ad4469bba44
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency log