Skip to main content

cmglaciology

Colormaps for glaciology, packaged for Matplotlib.

colormaps

Name Type Intended use
speed Sequential Ice surface speed
akbathtopo Topographic Bathymetry and surface elevation, Alaska
aktopo Topographic Surface elevation (land only), Alaska
grisbathtopo Topographic Bathymetry and surface elevation, Greenland
gristopo Topographic Surface elevation (land only), Greenland

Install

python -m pip install git+https://github.com/pism/cmglaciology.git

or, from a clone:

python -m pip install -e .

Usage example

import cmglaciology.cm as cmg
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 1, 100)[np.newaxis, :]

plt.imshow(x, aspect='auto', cmap=cmg.speed)
plt.axis('off')
plt.show()

For a reversed colormap, append _r to the colormap name:

plt.imshow(x, aspect='auto', cmap=cmg.speed_r)

For a discretized colormap, use the .resampled method on any of the colormaps:

plt.imshow(x, aspect='auto', cmap=cmg.speed.resampled(25))

Alternatively, the registered name string can be used. Names are prefixed with cmg.:

import cmglaciology  # required in order to register the colormaps with Matplotlib
...
plt.imshow(x, aspect='auto', cmap='cmg.speed')
plt.imshow(x, aspect='auto', cmap='cmg.speed_r')

For an image of all the available colormaps:

from cmglaciology import show_cmaps

show_cmaps()

Notes on the colormaps

The colormaps were designed in QGIS against data values, so their color stops are not evenly spaced. The stops are (data value → position in the colormap is linear between the first and last value):

  • speed: 10, 30, 100, 250, 750 (m/yr)
  • akbathtopo: -2000, 0, 1, 1250, 2000, 2500, 3000, 3500 (m)
  • aktopo: 0, 1, 1250, 2000, 2500, 3000, 3500 (m)
  • grisbathtopo: -500, 0, 1, 1500, 2000 (m)
  • gristopo: 0, 1, 1500, 2000 (m)

To reproduce the QGIS rendering, use vmin/vmax equal to the first and last stop. The topographic maps have a sharp break at sea level (0–1 m).

Adding a colormap

  1. Export the color ramp from QGIS (Layer Properties → Symbology → Save color map to file) and put the file in qgis/.
  2. Run python scripts/qgis2txt.py to regenerate the 256-level RGB tables in cmglaciology/cmaps/.
  3. Add the name to one of the groups at the top of cmglaciology/cm.py.
  4. Run python cm.py from the cmglaciology/ directory to refresh colormaps.png, and pytest to check everything.

Releasing

Development happens on main; releases are cut from the release branch by the ASFHyP3 actions workflows in .github/workflows/, as in pism-terra:

  1. Every pull request to main adds an entry to CHANGELOG.md under a heading with the next version number, e.g. ## [0.2.0] (or carries the bumpless label if it changes nothing a user would notice).
  2. To release, open a pull request from main to release and give it one of the labels major, minor, patch or bumpless.
  3. Merging it tags the new version (v0.2.0), which creates a GitHub release with the matching changelog section as its notes, brings release back into main, and publishes the package to PyPI.

The version number of an installed package comes from the git tags, through setuptools_scm.

Acknowledgements

The structure of this package — one text file of RGB values per colormap, loaded and registered with Matplotlib on import, with reversed _r versions and a show_cmaps() overview — is taken from cmcrameri by Callum Rollo and contributors, which packages Fabio Crameri's Scientific colour maps. cmglaciology/cm.py and the tests are adapted from cmcrameri's code, which is distributed under the MIT License, Copyright (c) 2020 Callum Rollo. Many thanks to Callum and the cmcrameri contributors for making this so easy to reuse. Any errors in this adaptation are our own.

No colormap data from cmcrameri or the Scientific colour maps is included here. If you need perceptually uniform colormaps, use cmcrameri directly.

License

MIT, see LICENSE.txt.

Metadata

Release files for cmglaciology 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cmglaciology 0.1.1
File Size Uploaded
cmglaciology-0.1.1.tar.gz 66.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cmglaciology 0.1.1
File Interpreter ABI Platform
cmglaciology-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 124.2 kB

Release files / cmglaciology-0.1.1.tar.gz

Download URL cmglaciology-0.1.1.tar.gz
Size 66.3 kB
Tags Source
SHA-256 checksum
How to use checksums
c75a21a0843386ec1de59f9600e05b840eecb48b46f4d7aa53296e6740c61be0
BLAKE2b-256 checksum
How to use checksums
ec95a83388249ebd9105678e446763450a6b6c597d3af6d397e88a6fe9ed4224
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 Oct 5, 2026.

Transparency log

Release files / cmglaciology-0.1.1-py3-none-any.whl

Download URL cmglaciology-0.1.1-py3-none-any.whl
Size 57.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
77c427fa015ea941eded50d6a3396f0fbace0b0c5cc48cebcf3502757e1a3174
BLAKE2b-256 checksum
How to use checksums
43fc404681de56ef4bbfe0c58a2ee06f94a658f74fb0eba8061b7efa9d705075
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 Oct 5, 2026.

Transparency log

Release history Release notifications | RSS feed

0.2.0

2 release files

This release

0.1.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page