ERA5 hourly temperature over Mount Rainier#

Hourly 2 m temperature from ARCO-ERA5 on Google Cloud Storage: no credentials, one week behind real time through ERA5T. The same call reaches ERA5-Land and the daily / monthly aggregates with source="gee".

import matplotlib.pyplot as plt

import easysnowdata as esd

aoi = (-121.94, 46.72, -121.54, 46.99)  # Mount Rainier

Load one week of hourly 2 m temperature. The result is Dask-backed, with time/latitude/longitude dims because the grid is geographic.

era5 = esd.climate.era5.load(
    aoi, "2023-03-01/2023-03-07", variables=["2m_temperature", "snow_depth"]
)
print(era5)
<xarray.Dataset> Size: 3kB
Dimensions:         (time: 168, latitude: 1, longitude: 1)
Coordinates:
  * time            (time) datetime64[ns] 1kB 2023-03-01 ... 2023-03-07T23:00:00
  * latitude        (latitude) float32 4B 46.75
  * longitude       (longitude) float32 4B -121.8
    spatial_ref     int64 8B 0
Data variables:
    2m_temperature  (time, latitude, longitude) float32 672B dask.array<chunksize=(24, 1, 1), meta=np.ndarray>
    snow_depth      (time, latitude, longitude) float32 672B dask.array<chunksize=(24, 1, 1), meta=np.ndarray>
Attributes: (12/16)
    valid_time_start:       1940-01-01
    valid_time_stop:        2026-06-30
    valid_time_stop_era5t:  2026-09-11
    last_updated:           2026-09-17 08:28:35.393445+00:00
    source:                 arco-era5-gcs
    source_id:              arco-era5-gcs
    ...                     ...
    data_citation:          Hersbach, H., et al. (2020). The ERA5 global rean...
    license:                Copernicus licence
    easysnowdata_version:   0.0.27.dev125+g480e638d6
    doi:                    10.1002/qj.3803
    version:                ERA5
    cadence:                hourly

The domain average through the week, in degrees Celsius.

t2m = (era5["2m_temperature"].mean(dim=["latitude", "longitude"]) - 273.15).compute()

fig, ax = plt.subplots(figsize=(9, 3.5))
t2m.plot(ax=ax, color="firebrick")
ax.axhline(0, color="0.5", linestyle="--", linewidth=1)
ax.set_ylabel("2 m temperature (°C)")
ax.set_title("ERA5 hourly 2 m temperature, Mount Rainier")
fig.tight_layout()
ERA5 hourly 2 m temperature, Mount Rainier

Provenance travels with the data: which route served it, the citation, the licence, and where the final ERA5 archive ends and preliminary ERA5T begins.

for key in ("source", "source_url", "product_id", "license", "valid_time_stop"):
    print(f"{key}: {era5.attrs[key]}")
source: arco-era5-gcs
source_url: https://github.com/google-research/arco-era5
product_id: era5
license: Copernicus licence
valid_time_stop: 2026-06-30