Janus / Guides / Phenology

Seasons · sub-annual index

Phenology, step by step.

Every field greens up and dries down on its own calendar. The Phenology tool finds the growing seasons in a vegetation index series, fits a curve to each, and reads when it starts, peaks and ends: on the chart for one pixel, and as maps for the whole image.

01The idea

The tool is Zeit's port of phenofit (Kong et al. 2022). It smooths the series to find its seasons, from one trough to the next; fits a curve to the observations of each season (a double logistic, by default Elmore's); and reads from the curve:

SOS
Start of season: the day the curve rises past the threshold (by default, half of the season's amplitude).
POS
Peak of season: the day of the curve's maximum.
EOS
End of season: the day it falls back past the threshold.
LOS
Length of season: EOS minus SOS, in days.

It needs a sub-annual vegetation index (NDVI, EVI; 8 or 16 days, or monthly) with at least six observations a year. Dates on the maps are days of the year.

02The example

The same MODIS EVI series as the BFAST guide: every 16 days from 2001 to 2025, 250 m, over 170 × 170 km of farmland in western France. The pin is on a field.

03On the chart

Tools → Temporal dynamics → Phenology. With the chart fit on, the seasons' curves are drawn over the series, with vertical lines at each start, peak and end, and the Statistics table lists the seasons.

The Phenology window with its parameters; the EVI map of June 2024 with a pin; on the chart 25 years of the pin's EVI with a curve fitted to each season and lines at their starts, peaks and ends; the Statistics table with 22 seasons.
Twenty-five years of one field: 22 seasons found, each with its curve.
The chart: the EVI of the field, a curve for each season and vertical lines at the starts, peaks and ends.
22 seasons in 25 years: in some years no season passed the criteria.
The Statistics table: 22 seasons, the latest 12 shown, with the peaks of 5 May 2012, 5 June 2014 and 1 July 2015 and their start and end dates.
The seasons, by their peaks.

The peaks move: 5 May in 2012, 5 June in 2014, 1 July in 2015. That is the crop rotation: a winter cereal peaks in spring, sunflower or maize in summer. Hover the map to fit any other pixel.

04The parameters

ParameterDefaultWhat it does
CurveelmoreThe function fitted to each season: Beck, Elmore, Gu, Zhang (double logistics), asymmetric Gaussian, Klos, or the double logistic of phenofit.
Season start/endtrs5How SOS and EOS are read: a threshold of the amplitude (50%, 20%, 60%), the derivative, or Zhang's or Gu's methods.
SmoothingwhittakerUsed to find the seasons (the curves are fitted to the observations): Whittaker, HANTS or none.
Whittaker lambda10Larger is smoother: fewer, broader seasons.
HANTS frequencies3Harmonics a year, with HANTS.
Min pixel amplitude0.1Pixels whose series varies less (water, towns, bare rock) are skipped. In the index's units: 1000 for NDVI × 10000.
Min season amplitude0Seasons that rise less above their troughs are dropped.
Min season length0Seasons shorter than this, in days, are dropped.
Season mappedmedianHow a pixel's seasons become one map: the median of all, the latest, or the one peaking in Year.

For a field with a double crop, or grassland cut twice, lower lambda (or raise the HANTS frequencies) until the chart splits the year into two seasons; for a noisy series, raise it.

05Running it

Phenology fits a curve to every season of every pixel: 0.46 million pixels and 25 years here, about 6 minutes on every core (the window estimated 8). It runs in the background; the map and the chart stay usable.

The Tasks panel with the Phenology run over the whole image and its progress.
Tasks: the run, its progress and the time left.

06The maps

With Season mapped on the median, each map is the typical year of each pixel:

The start of season over the area, from day 37 in dark blue to day 149 in yellow; the Layers panel lists the eight outputs.
Start of season, day 37 (early February, dark) to day 149 (late May, yellow).
The peak of season over the area, from day 105 to day 203.
Peak of season, day 105 (mid April) to day 203 (late July): spring crops and grassland against summer crops.
The length of the season, from 83 to 200 days; long seasons in yellow along the valleys and woods.
Length of season, 83 to 200 days: short in the fields, long in the woods and meadows of the valleys.
MapMeaning
SOS, POS, EOSStart, peak and end of the season, day of the year.
Length of seasonEOS − SOS, in days.
Peak valueThe index at the peak.
AmplitudeThe rise of the season above its troughs.
Fit R²How well the curves fit the observations.
Seasons detectedHow many seasons the pixel has.

07What next

  • One year: Season mapped → the year below maps the season peaking in a given year, to compare a drought year with a normal one.
  • Breaks in the seasons: BFAST finds when the season's shape changed.
  • Classes from the curves: Tools → Classification & pattern recognition → TWDTW classification classifies pixels by patterns taken from pins.
  • Script it: zeit.phenology in Python.

08References

  • Kong, D., McVicar, T. R., Xiao, M., Zhang, Y., Peña-Arancibia, J. L., Filippa, G., Xie, Y., Gu, X. (2022). phenofit: an R package for extracting vegetation phenology from time series remote sensing. Methods in Ecology and Evolution, 13, 1508–1527.
  • Elmore, A. J., Guinn, S. M., Minsley, B. J., Richardson, A. D. (2012). Landscape controls on the timing of spring, autumn, and growing season length in mid-Atlantic forests. Global Change Biology, 18, 656–674.
  • Zeit: the library behind the tools of Janus.