SNOTEL snow water equivalent at Mount Rainier#

The AWDB network — SNOTEL and SNOLITE telemetry sites, SCAN, and the manual snow courses — through easysnowdata.stations. No credentials.

inventory() answers “which stations are here” as a GeoDataFrame, and load() turns the ones you pick into a (station, time) Dataset with water-year coordinates already attached.

import matplotlib.pyplot as plt

import easysnowdata as esd

aoi = (-122.1, 46.6, -121.3, 47.1)  # Mount Rainier, WA

Every AWDB station in the box whose daily record has been probe-verified.

inv = esd.stations.inventory(aoi, networks="awdb", daily_only=True)
print(inv[["name", "network_code", "elevation_m", "state"]].to_string())
                           name network_code  elevation_m state
code
375_WA_SNTL       Bumping Ridge         SNTL       1402.1    WA
942_WA_SNTL      Burnt Mountain         SNTL       1268.0    WA
1085_WA_SNTL        Cayuse Pass         SNTL       1603.2    WA
418_WA_SNTL         Corral Pass         SNTL       1770.9    WA
928_WA_SNTL   Huckleberry Creek         SNTL        685.8    WA
642_WA_SNTL          Morse Lake         SNTL       1645.9    WA
941_WA_SNTL              Mowich         SNTL        966.2    WA
679_WA_SNTL            Paradise         SNTL       1569.7    WA
692_WA_SNTL        Pigtail Peak         SNTL       1767.8    WA
1257_WA_SNTL        Skate Creek         SNTL       1149.1    WA
863_WA_SNTL     White Pass E.S.         SNTL       1353.3    WA

One water year of SWE and snow depth for all of them. Values are centimetres, the unit the networks themselves report.

obs = esd.stations.load(inv, variables=["swe", "snwd"], time="2023-10/2024-09")
print(obs)
<xarray.Dataset> Size: 84kB
Dimensions:               (station: 11, time: 366)
Coordinates: (12/28)
  * station               (station) <U12 528B '375_WA_SNTL' ... '863_WA_SNTL'
    network               (station) <U4 176B 'awdb' 'awdb' ... 'awdb' 'awdb'
    name                  (station) <U17 748B 'Bumping Ridge' ... 'White Pass...
    client                (station) <U4 176B 'awdb' 'awdb' ... 'awdb' 'awdb'
    network_code          (station) <U4 176B 'SNTL' 'SNTL' ... 'SNTL' 'SNTL'
    latitude              (station) float64 88B 46.81 47.04 ... 46.64 46.64
    ...                    ...
    daily_provenance      (station) <U6 264B 'native' 'native' ... 'native'
    metadata_fetched_at   (station) <U19 836B '2026-09-17 00:00:00' ... '2026...
    station_id            (station) <U12 528B '375:WA:SNTL' ... '863:WA:SNTL'
  * time                  (time) datetime64[us] 3kB 2023-10-01 ... 2024-09-30
    water_year            (time) int64 3kB 2024 2024 2024 ... 2024 2024 2024
    dowy                  (time) int64 3kB 1 2 3 4 5 6 ... 362 363 364 365 366
Data variables:
    snwd                  (station, time) float64 32kB 0.0 0.0 0.0 ... 0.0 0.0
    swe                   (station, time) float64 32kB 0.0 0.0 0.0 ... 0.0 0.0
Attributes:
    source:                awdb
    source_id:             awdb
    source_title:          USDA NRCS AWDB REST API v1
    source_url:            https://wcc.sc.egov.usda.gov/awdbRestApi/services/v1
    product_id:            awdb-stations
    title:                 SNOTEL, SCAN and snow-course observations (USDA NR...
    data_citation:         USDA Natural Resources Conservation Service, Natio...
    license:               Public domain (US government data)
    easysnowdata_version:  0.0.27.dev125+g480e638d6
    interval:              daily

dowy is a plain integer coordinate, so it can be swapped in as the axis to compare stations on a common water-year calendar.

fig, ax = plt.subplots(figsize=(9, 4.5))
for station in obs["station"].values:
    series = obs["swe"].sel(station=station)
    ax.plot(
        obs["dowy"],
        series,
        label=f"{str(obs['name'].sel(station=station).values)} "
        f"({float(obs['elevation_m'].sel(station=station)):.0f} m)",
    )
ax.set_xlabel("day of water year (1 = 1 October)")
ax.set_ylabel(f"SWE ({obs['swe'].attrs['units']})")
ax.set_title("SNOTEL SWE around Mount Rainier, water year 2024")
ax.legend(fontsize=8)
fig.tight_layout()
SNOTEL SWE around Mount Rainier, water year 2024

Total running time of the script: (0 minutes 5.172 seconds)