q15·intermediate
How are coastal sea-surface temperatures changing, and are marine heatwaves becoming more common?
oceanclimatemarine-ecosystemfisheries Datasets: 6 15–45 min
▶ Find the data for your area
Draw a rectangle to pick your area of interest, then see what NASA data covers it (live, here in your browser) or download a ready-to-run notebook with your AOI pre-filled. The notebook runs in any Python environment — it needs a free Earthdata Login to fetch the data.
Current AOI:
-116, 22 → -107, 32 (Gulf of California)On this page
How are coastal sea-surface temperatures changing?
What you can answer
- Decadal SST trend for any coastal pixel (2002-present)
- Climatological seasonal cycle vs current-year deviation
- Marine heatwave detection (≥5 days above 90th percentile)
- Spatial gradient between coast and open ocean
- Cross-shelf vs cross-shore variability
What you can NOT answer with these alone
- Sub-surface temperature without combining with ECCO reanalysis or Argo float data
- Internal-wave dynamics at scales under 4 km without high-resolution SAR + altimetry combinations
- Causal attribution to a specific climate driver (ENSO, AMO) — requires separate analysis
Code template
import earthaccess
import xarray as xr
import numpy as np
earthaccess.login(strategy="netrc")
# Gulf of California (climate-vulnerable hotspot)
aoi = (-116, 22, -107, 32)
window = ("2002-07-01", "2025-12-31")
# 1. GHRSST L4 daily 1 km (gap-filled, multi-sensor analysis)
ghrsst = earthaccess.search_data(short_name="MUR-JPL-L4-GLOB-v4.1",
bounding_box=aoi, temporal=window)
# Open all granules; extract analysed_sst (in Kelvin); subset to AOI
# Compute monthly mean per pixel → climatology
# Current year monthly mean → anomaly
# 2. Marine heatwave detection
# A pixel-day is a "heatwave day" if SST > 90th percentile of climatology
# (typically using 30-year baseline, but 20+ year MUR record works)
# A "heatwave" = ≥5 consecutive heatwave days
# Count heatwave-days per year → trend
# 3. SWOT SSH context (current eddies)
swot = earthaccess.search_data(short_name="SWOT_L2_LR_SSH_2.0",
bounding_box=aoi,
temporal=("2024-03-01", "2025-12-31"))
# Overlay SSH anomaly on SST anomaly → eddy-attributed warm spots
# 4. Plot:
# - Decadal trend map
# - Marine heatwave frequency per year
# - Monthly anomaly time-series
# - SST + SSH cross-section
Expected output
- Decadal trend map (°C/decade) for the AOI
- Marine heatwave frequency: heatwave-days per year time-series 2002-present
- Current-year anomaly map vs 20-year climatology
- Cross-section: SST + sub-surface temperature from ECCO
Caveats
- GHRSST L4 is gap-filled analysis — daily-global is possible because it interpolates across cloudy regions; consistency, not direct observation, in those pixels
- Coastal SST has skin-vs-bulk differences — satellites measure top millimeter; oceanographic in-situ measures meters down. Subtle differences for ecological work.
- Cloud bias: coastal regions are often persistently cloudy (e.g., California coast in summer); aggregated products handle this but high-resolution single-day products often have data gaps
- Marine-heatwave threshold convention varies — Hobday et al. 2016 is the most-cited; pick a published convention and document it
Cross-DAAC composition
OB.DAAC (MODIS Aqua SST, PACE OCI) + PO.DAAC (GHRSST, SWOT, ECCO) — two DAACs, uniform Earthdata Login.
Sources
- GHRSST MUR: https://podaac.jpl.nasa.gov/dataset/MUR-JPL-L4-GLOB-v4.1
- Marine heatwave convention (Hobday et al.): https://www.marineheatwaves.org/definition.html
- OceanColor (MODIS SST): https://oceancolor.gsfc.nasa.gov/
⚲ How a scientist answers this
Parameters
Sea-surface temperature (degrees C, from Kelvin) from GHRSST L4 MUR (gap-filled multi-sensor analysis, 1 km daily, 2002+) or MODIS/VIIRS thermal-IR SST (4 km); marine heatwaves are defined per the Hobday framework as SST above the seasonally-varying 90th-percentile climatology for >=5 consecutive days. SWOT SSH anomalies and ECCO reanalysis add eddy and sub-surface context.
Method
Compute area-weighted (cos-lat) monthly SST means per pixel, fit an area-weighted Theil-Sen slope with a Mann-Kendall test for the robust decadal trend, and build a day-of-year climatology with its 90th percentile to detect marine-heatwave days (>=5 consecutive), counting heatwave days/events per year to test whether they are increasing.
Validation
State the climatology baseline period (ideally 30 years; note a 20+ year MUR record is a compromise) and cross-check the trend and heatwave days against an independent SST product or in-situ buoys/Argo, flagging coastal pixels contaminated by land or persistent cloud in the IR sensors.
In plain EnglishTrack the daily sea temperature for two decades, find the long-term warming slope, and count the spells where it sits in the hottest 10% for that time of year for at least five days running.
Make it yours → Set the coastal box and date range and choose the climatology baseline and heatwave percentile/duration in the notebook.
⌨ Run the core method · no login
The robust trend (Theil–Sen + Mann–Kendall) at the heart of this question — runnable on synthetic data, right here. The full earthaccess code template further down does it on real NASA data (needs an Earthdata login).