spei.plot module

class spei.plot.Crameri(name: str)

Bases: object

Colormaps for matplotlib, useful for drought, based on Crameri et al. (2020).

References

Crameri, F., G.E. Shephard, and P.J. Heron: The misuse of colour in science communication, Nature Communications, 11, 5444. 2020.

static cmap_from_list(colors: list[list[float]], name: str, _r: bool = False) Colormap
lajolla() Colormap
roma() Colormap
vik() Colormap
spei.plot.deficit_knmi(df: DataFrame, ax: Axes | None = None, window: int = 0) Axes

Plots the precipitation deficit for various scenarios using the given DataFrame.

The function generates a plot that visualizes the precipitation deficit over time for different statistical measures and specific years. It includes the 5% driest years, the median, specific record years (1976 and 2018), the maximum deficit, and optionally the current year if present in the DataFrame.

Parameters:

dfpandas.DataFrame

A DataFrame where: - Rows represent time (e.g., days or months within a year). - Columns represent years (e.g., 1976, 2018, etc.). - Values represent cumulative precipitation deficit (in millimeters).

axmatplotlib.axes._axes.Axes, optional

An Axes object to plot on. If None, a new figure and axes are created.

windowint, optional

If True, applies a rolling mean over a n-day window to the median and 95th percentile. This is also done by the KNMI but not documented.

Returns:

matplotlib.axes._axes.Axes

The Axes object of the generated plot.

Notes:

  • The x-axis represents the time of year, formatted as months (April to October).

  • The y-axis represents the precipitation deficit in millimeters.

  • The plot includes a grid on the y-axis for better readability.

  • If the current year is present in the DataFrame, it is highlighted in black.

  • The maximum deficit is annotated with the range of years in the dataset.

spei.plot.heatmap(sis: list[Series], add_category: bool = False, cmap: str = 'Reds_r', vmin: float = -3.0, vmax: float = -1.0, yticklabels: list[str] | None = None, ax: Axes | None = None) Axes

Plots multiple standardized indices on a heatmap.

Parameters:
  • sis (List[Series]) – A list of pandas Series objects, each representing a time series of SI values.

  • add_category (bool, optional) – If True, adds category labels to the colorbar. Default is False.

  • cmap (str, optional) – The colormap to use for the heatmap. Default is “Reds_r”.

  • vmin (float, optional) – The minimum value for color normalization. Default is -3.0.

  • vmax (float, optional) – The maximum value for color normalization. Default is -1.0.

  • yticklabels (List[str] or None, optional) – Custom labels for the y-axis ticks. If None, the names of the Series objects are used. Default is None.

  • ax (matplotlib Axes, optional) – A matplotlib Axes object to plot on. If None, a new figure and axes are created. Default is None.

Returns:

The matplotlib Axes object with the heatmap.

Return type:

Matplotlib Axes

References

van Mourik, J., Ruijsch, D., van der Wiel, K., Hazeleger, W., Wanders, N.: Regional drivers and characteristics of multi-year droughts. 2024

spei.plot.monthly_density(si: Series, years: list[int], months: list[int], cmap: str | Colormap = 'tab20c', ax: Axes | None = None) Axes

Plot the monthly kernel-density estimate for a specific year.

Parameters:
  • si (pandas.Series) – Series of the standardized index

  • year (list, optional) – List of years as int

  • months (list, optional) – List of months as int, by default all months

  • cmap (str, optional) – matlotlib colormap, by default ‘tab10’

  • ax (matplotlib.Axes, optional) – Axes handle, by default None which create a new axes

Returns:

Axes handle

Return type:

matplotlib.Axes

spei.plot.si(si: Series, add_category: bool = True, figsize: tuple[float, float] = (6.5, 4.0), cmap: str | Colormap = 'seismic_r', background: bool = True, ax: Axes | None = None, **kwargs) Axes

Plot the standardized index values as a time series.

Parameters:
  • si (pandas.Series) – Series of the standardized index

  • add_category (bool, optional) – Add the category labels to the right y-axis, by default True

  • figsize (tuple[float], optional) – Figure size, by default (6.5, 4)

  • cmap (str, optional) – Colormap for the background or line fill

  • background (bool, optional) – Color the background if True, else color the line

  • ax (matplotlib.Axes, optional) – Axes handle, by default None which create a new axes

Returns:

Axes handle

Return type:

matplotlib.Axes

spei.plot.threshold(series: Series, threshold: Series, figsize: tuple[float, float] = (6.5, 4.0), fill_color: str = 'red', ax: Axes | None = None, **kwargs) Axes

Plot the time series with a threshold line and fill the area below the threshold.

Parameters:
  • series (pandas.Series) – Time series of the meteorological of hydrological data

  • threshold (pandas.Series) – Series of the threshold, must have the same index as series

  • color (str, optional) – Color for the fill area, by default ‘red’

  • ax (matplotlib.Axes, optional) – Axes handle, by default None which create a new axes

Returns:

Axes handle

Return type:

matplotlib.Axes