CalCOFI.io CalCOFI.io open data ecosystem

Oxygen saturation

Oxygen percent saturation

%key oxygen_saturationNERC P01 OXYSZZ01P06 units UPCTseries oxygen_saturation

CalCOFI holds 690,728 values of it from 26,994 sampling events in one dataset, 1949–2021, from the surface to 5,351 m. At 200–500 m it has fallen 2.21 per decade since 1984.R Below the mixed layer off Southern California oxygen has fallen since the 1980s and the hypoxic boundary has risen toward the shelf, squeezing the habitat of fish and invertebrates.C

690,728
values
2,660
flagged
i
2,660 of these 690,728 values (0.4 %) are flagged by their provider as questionable or bad. The Explorer, the climatology and its anomalies leave them out; do the same when you read the data yourself (cc_qual_ok_sql() in calcofi4r, qual_ok_sql() in calcofi4py).
1949–2021
years
1
dataset
0–5,351 m
depth
every month
months
Computed (algorithm/data source unspecified)

Measured in 1 dataset
i

One row per series, one cell per year, darker with more values — the same strip the front door draws per dataset and a species page draws per taxon. Each row is one dataset's own measurement_type; the label is written once, in the title above.

  • 690,728 values · 26,994 sampling events · 1949–2021 · 0–5,351 m · 220 grid cells · 558 cruises
    series oxygen_saturation · source column o2sat · flag column o2satq 2,660 flagged · 0.4 %

Explorera depth section vs normaldb-queryERDDAPThis page as JSON R · Python · Parquet

Every way in 8 ways · ERDDAP · Parquet · R · Python · JSON

Read from measurements.json of release v2026.11.05, written at release by calcofi4db::build_measurements_catalog() beside taxa.json. The catalog's index is /measurements/; the JSON-LD on this page is a schema.org/DefinedTerm in the NERC P01 term set with a PropertyValue per series.

ExplorerExplorer · a depth section vs normaldb-query
ERDDAP · Hydrographic BottleCalCOFI's own server, the Hydrographic Bottle table constrained to this series
https://erddap.calcofi.io/erddap/tabledap/calcofi_bottle.html?&measurement_type=%22oxygen_saturation%22
How it is measured Computed from bottle dissolved oxygen, temperature and salinity
rosette bottle
Hydrographic Bottle · rosette bottle
Computed from bottle dissolved oxygen, temperature and salinity

Percent saturation computed from the bottle Winkler oxygen against the solubility at that temperature and salinity. (the record's own derivation (measurement_type.csv))

flag o2satq2,660 flagged
Why it matters 8 ways to say it · EOV Oxygen

Essential Ocean Variable
Oxygen

the GOOS specification sheet for this Essential Ocean Variable lists it, and asks

GOOS asks

  • How large are the ocean’s “dead zones” and how fast are they changing?
  • Is the biomass of the ocean changing?

GOOS specification sheet ↗ · quoted, not copied

other ways to say why · 7
  • authored Saturation says whether the water holds more or less oxygen than the air would give it at that temperature, so it separates warming from breathing. needs a citation before it can be the pick
  • authored Oxygen is the balance of what the ocean takes in at the surface and what animals and bacteria use below; a warmer ocean holds less and mixes less, so it is losing oxygen. needs a citation before it can be the pick
  • authored Warming thins the oxygen the surface layer can hold, and the upper ocean has been losing it for decades across the North Pacific, not only here. needs a citation before it can be the pick
  • GOOS asks How large are the ocean’s “dead zones” and how fast are they changing? source
  • GOOS asks Is the biomass of the ocean changing? source
  • Wikipedia Hypoxia (environmental) source
  • Wikipedia Ocean deoxygenation is the reduction of the oxygen content in different parts of the ocean due to human activities. There are two areas where this occurs. Ocean deoxygenation · CC BY-SA 4.0 · rev. 1354922617
The record’s own history 6 depth bands against the 1993–2013 normal

Each year against the normal
i

Deeper than the climatology reaches: 13,400 values at 1000–2000 m, 3,521 values at 2000+ m have no normal to depart from, because the release’s climatology stops at its deepest built bin. Carrying it to the bottom is one argument of build_climatology() and puts these bands on the page too.

Units and range % · -1 … 250 declared · 2,660 flagged

% · P06 units UPCT

bounds-1 … 250 %observed-0.1 … 214.1 %flagged2,660baselineclimatology ✓
details
bounds
The registry declares -1 … 250 % for oxygen_saturation; a value outside it is dropped at the ingest (drop_out_of_bounds()).
observed
Hydrographic Bottle oxygen_saturation -0.1 · median 54.6 · 214.1 % (5th–95th percentile 5.2–105.2)
flags
Hydrographic Bottle oxygen_saturation o2satq on 28,127 of 690,728 rows: 2 1,859 · 6 23,608 · 8 2,657 · 9 3; qual_ok keeps 688,068. The codes are this dataset's own vocabulary, uninterpreted.
baseline
A monthly climatology exists for this measurement (the release's climatology table: 1993–2013, dataset × station × the cruise's month × 10 m bin), so the Explorer can draw anomalies against it rather than values.

The familiar scale
i

Bars are each series' 5th–95th percentile, the line its minimum to maximum, the ring its median; the marks are metadata/measurement_scale.csv's, each hovering to its own source.

By depth · by month 0–5,351 m · every month

By depth
i

Values per depth band at the release grain, one thin bar per series. The bands are the record's own (0-10 … 2000+ m).

By month
i

Values per calendar month, one row per series: CalCOFI's quarterly cruises show as peaks in the months the ships sail.

Cite the release, v2026.11.05

Cite the release; each dataset's own citation, licence and DOI are on its page — Hydrographic Bottle. The Explorer's Share → Cite writes it for the view you make.