Dissolved oxygen (µmol/kg)
Dissolved oxygen (QC'd)
µmol/kgkey oxygen_umol_kgNERC P01 DOXMZZXXP06 units KGUMone key across 2 datasetsseries oxygen_umol_kg · oxygen_umol_kg_ave_sta_corr
CalCOFI holds 1,317,617 values of it from 35,773 sampling events in 2 datasets, 1949–2026, from the surface to 5,351 m. At 200–500 m it has fallen 7.02 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
- 1,317,617
- values
- 1,286
- flagged
i
1,286 of these 1,317,617 values (under 0.1 %) 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–2026
- years
- 2
- datasets
- 0–5,351 m
- depth
- every month
- months
Measured in
2 datasets
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.
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.
-
series
oxygen_umol_kg· source columnoxy_umol_kg· flag columno_qual1,286 flagged · 0.2 % -
series
oxygen_umol_kg_ave_sta_corr· source columnox_aveu_m_sta_corr· flag columnox_aveu_m_sta_corr_qsensor meanDO average station-corrected
Explorera depth section vs normaldb-queryERDDAPThis page as JSON R · Python · Parquet
Every way in 9 ways · ERDDAP · Parquet · R · Python · JSON
Read from measurements.json of release v2026.10.21, 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-querySELECT * FROM read_json('…/v2026.10.21/catalog.json')
-- objects[] WHERE table = 'obs_env'
-- AND partition_value = 'oxygen_umol_kg'
-- | 'oxygen_umol_kg_ave_sta_corr'library(calcofi4r)
con <- cc_get_db() # the promoted release
tbl(con, "obs_env") |> filter(measurement_type %in% c("oxygen_umol_kg", "oxygen_umol_kg_ave_sta_corr"))import calcofi4py as cc
con = cc.cc_get_db()
con.sql("SELECT * FROM obs_env WHERE measurement_type IN ('oxygen_umol_kg', 'oxygen_umol_kg_ave_sta_corr')").df()The structure O2 dioxygen
RDKit 2026.03.6 from the ChEBI molfile, in the page’s ink · CC BY 4.0. ChEBI’s roles are never shown.
How it is measured Automated Winkler titrator, UV end-point detector at 350 nm
Carpenter's (1965) modification of Winkler's 1889 method: manganous hydroxide is oxidised by the sample's dissolved oxygen, acid frees iodine from iodide in proportion, thiosulfate titrates the iodine, and an automated titrator reads the end point by the UV absorbance of tri-iodide rather than the visible starch-iodine color. (calcofi.org Bottle sampling methods)
- Mn2+ + 2OH- -> Mn(OH)2
- 2Mn(OH)2 + O2 -> 2MnO(OH)2
- MnO(OH)2 + 4H+ + 2I- -> Mn2+ + I2 + 3H2O
- I2 titrated with thiosulfate
Why it matters 7 ways to say it · EOV 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 · 6
- 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
- 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: 16,253 values at 1000–2000 m, 6,649 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.
i
Deeper than the climatology reaches: 16,253 values at 1000–2000 m, 6,649 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 µmol/kg · -20 … 700 declared · 1,286 flagged
µmol/kg (umol/kg in metadata/measurement_type.csv) · P06 units KGUM
details
- bounds
- The registry declares
-20 … 700 µmol/kgforoxygen_umol_kg · oxygen_umol_kg_ave_sta_corr; a value outside it is dropped at the ingest (drop_out_of_bounds()). - observed
- Hydrographic Bottle
oxygen_umol_kg-0.4349 · median 151.5 · 485.7 µmol/kg (5th–95th percentile 15.65–264)
CTD Cast Filesoxygen_umol_kg_ave_sta_corr0 · median 112.2 · 691.4 µmol/kg (5th–95th percentile 17.35–262.3) - flags
- Hydrographic Bottle
oxygen_umol_kgo_qualon 29,722 of 690,697 rows:628,436 ·81,285 ·91; qual_ok keeps 689,411. The codes are this dataset's own vocabulary, uninterpreted.
CTD Cast Filesoxygen_umol_kg_ave_sta_corrcarries no quality code at the release grain (its source column isox_aveu_m_sta_corr_q); qual_ok keeps all 626,920. - 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.
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).
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.
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.10.21
Cite the release; each dataset's own citation, licence and DOI are on its page — Hydrographic Bottle, CTD Cast Files. The Explorer's Share → Cite writes it for the view you make.