Polytope time series¶
In this notebook you will see how to:
use Polytope to retrieve a timeseries at a specific location of interest
aggregate the data over the ensemble and create a simple timeseries plot
create a meteogram
Components of earthkit¶
This tutorial uses the following earthkit components - click any logo to open the package documentation:
1. Data retrieval¶
First, retrieve ENS time series data using Polytope.
[ ]:
import earthkit.data as ekd
# lat, lon
location = [38.78655345978706, -9.109280931080349]
request = {
"class": "od",
"stream" : "enfo",
"type" : "pf",
"date" : -1,
"time" : "0000",
"levtype" : "sfc",
"expver" : 1,
"domain" : "g",
"param" : "164/167/169",
"number" : "1/to/50",
"step": "0/to/360",
"feature" : {
"type" : "timeseries",
"points": [location],
"axes": "step",
},
}
ds = ekd.from_source("polytope", "ecmwf-mars", request, stream=False, address='polytope.ecmwf.int').to_xarray()
ds
<xarray.Dataset> Size: 176kB
Dimensions: (latitude: 1, longitude: 1, levelist: 1, number: 50,
datetime: 1, t: 145)
Coordinates:
* latitude (latitude) float64 8B 38.77
* longitude (longitude) float64 8B 350.9
* levelist (levelist) int64 8B 0
* number (number) int64 400B 1 2 3 4 5 6 7 8 9 ... 43 44 45 46 47 48 49 50
* datetime (datetime) <U20 80B '2026-04-14T00:00:00Z'
* t (t) datetime64[ns] 1kB 2026-04-14 ... 2026-04-29
Data variables:
tcc (latitude, longitude, levelist, number, datetime, t) float64 58kB ...
2t (latitude, longitude, levelist, number, datetime, t) float64 58kB ...
ssrd (latitude, longitude, levelist, number, datetime, t) float64 58kB ...
Attributes:
class: od
Forecast date: 2026-04-14T00:00:00Z
domain: g
expver: 0001
levtype: sfc
number: 1
stream: enfo
type: pf
levelist: 02. Aggregate and plot a simple timeseries¶
We can compute simple aggregations easily using earthkit-transforms.
[ ]:
import earthkit.transforms as ekt
import earthkit.plots as ekp
mean_ds = ekt.ensemble.mean(ds)
ekp.timeseries.line(
mean_ds['2t'],
x="t",
x_units="celsius",
title="ERA5 hourly {variable_name} at {latitude:%Lt} {longitude:%Ln}"
).show()
3. Plot a meteogram directly¶
More powerful plots are quickly available with earthkit-plots. We can directly plot the retrieved data as an ENS meteogram.
[ ]:
TIME_FREQUENCY = "6h"
QUANTILES = [0, 0.1, 0.25, 0.5, 0.75, 0.9, 1]
ekp.timeseries.multiboxplot(ds, resample=TIME_FREQUENCY, quantiles=QUANTILES).line(
ds.mean(dim="number")
)