A transect is one CalCOFI line, ordered by station number. No start and end station to pick, which is what lets every line Γ cruise be drawn automatically. Deliberately not the order stations were occupied: that is the ship's track, so its direction is whichever way the ship steamed, and it is missing on roughly half the database's cast records.
It is drawn offshore on the left, the coast on the right, which is how the map beside it is laid out β a CalCOFI line runs west-south-west from the coast, so a feature you find in one is in the same place in the other.
Both rulers label the same axis: distance below, station number
above. They are interchangeable, not merely adjacent β the CalCOFI
grid projection (+proj=calcofi) is equidistant along a line at
7.386 km (3.99 nautical miles) per station unit,
constant to within 0.04 % over the 665 km of line 90, so station
number is distance on a different scale.
Values are averaged into 10 m depth bins to 500 m. CTD sensors sample continuously, so binning is not merely compression β grouping by exact depth would deduplicate almost nothing, and the native-resolution jaggedness is sensor precision rather than signal. The colour field between stations is interpolated by the plotting library for legibility; only the station columns are measurements.
By default the x-axis measures between the stations this cruise actually occupied, so the section fills the plot and the data is as large as it can be. Comparable x-axis instead measures each station's distance along the full line, so two cruises that sampled different extents are directly comparable in width β at the cost of blank space where a cruise stopped short.
This is not cosmetic. Line 93.3 has not been sampled past station 90 since January 2025, though 113 of the 130 cruises before that reached station 120. Under the default ruler a recent section is drawn the same width as a historical one covering far more ocean, and comparing the two by eye overstates recent gradients.
The climatology is a plain mean per station, 10 m depth bin and
calendar month across the baseline years β the finest grouping
CalCOFI's sampling design supports, since quarterly-ish cruises over decades
give many years per calendar month at a station but only a handful
of days. The anomaly is the measured value minus the mean of the cast's own
calendar month. Bins are 10 m floor bins labelled by their shallow edge
(0, 10, 20 β¦), the database's depth_bin convention: the
released CTD series is thinned to a 10 m grid plus the profile's
inflection points, so finer bins would be built only from where the profile
happens to bend. The table itself (climatology) ships in the
release, so it is the same one the CalCOFI Explorer subtracts.
Rudnick et al. (2017) fit annual and semiannual harmonics for the CUGN glider climatology, which suits near-continuous glider sampling. CalCOFI's is episodic and unevenly spaced, so a monthly mean is used instead: defensible, and legible enough that a reader can say exactly what the anomaly is a departure from.
A cell whose baseline has fewer than the minimum number of observations is left blank, not zero. An unsampled baseline is not a zero anomaly, and colouring it "normal" would claim knowledge of somewhere never measured. Blank areas in the anomaly view are therefore gaps in the baseline, not in this cruise.
The grey silhouette is GEBCO 2025 sampled every 500 m along the line, not once per station. Sampling only at stations and joining the soundings does not simplify the terrain, it draws different terrain: on line 86.7 station 50 sits on a Channel Islands bank at 80 m with neighbours 37 km away in 1,200β1,650 m of water, which came out as one triangle 74 km wide and 1.5 km tall.
The banks that remain are real. Line 93.3 crosses the Southern California Borderland, and the three rises near 55, 74 and 130 km offshore are Thirtymile Bank, Fortymile Bank and the TannerβCortes rise β the middle one reaching 178 m. They look like spikes because the vertical scale is exaggerated roughly a thousandfold: the panel spans hundreds of kilometres across and 500 m down. A 7 km-wide bank rising 470 m is drawn about twenty pixels wide and two hundred tall. Nothing here is a seamount in the shape the plot suggests.
Each cruise carries the stage of the CTD product it came from. The two preliminary tiers are different in a way that matters: a CTD-only cruise has not been through the bottle merge, so the bottle-corrected salinity, oxygen and chlorophyll do not exist for it and the uncorrected sensor series are shown instead. A CTD & bottle cruise has been merged but may still change after post-cruise calibration.
Everything above is built by two scripts, run weekly and on each database
release:
build_sections.sql
(extraction, binning, climatology, anomaly) and
build_sections.py
(reshaping to the matrices this page draws). The same definitions are
available in R as
calcofi4r's
cc_transect_section(), cc_climatology() and
cc_anomaly(), for anyone who would rather work from the
database directly. The seafloor comes from the same package β
cc_transect_bathy(), which
ctd-viz draws its silhouette with
too, so the two cannot disagree about where the bottom is.
CTD cast data:
This release: