Methodology
Every figure on this site is derived from NOAA public-domain data. This page documents how we pick weather stations, what we compute, and where the limits of each method are. For source datasets see Data Sources.
Primary station per city
Each city is linked to one primary station in NOAA's Global Historical Climatology Network (GHCN). The primary station is chosen as the nearest station that is either an airport (the longest, most uniform records) or a long-record cooperative station. City climate figures come from this station — not interpolated, not blended. This means a city's "climate" is technically the climate at the airport closest to it, which can differ slightly from neighborhood-level conditions.
30-year climate normals
All monthly figures (avg high, avg low, avg precipitation, snow, rainy days) are 1991-2020 normals — a 30-year rolling window that NOAA re-publishes every decade. "Normals" smooth over individual storms and unusual years to describe what's typical. They aren't forecasts. The previous period (1981-2010) ran ~0.4°F cooler on average for most US stations; the next (2001-2030) is expected to be warmer still.
Daily all-time records
We compute the highest temperature ever recorded on each calendar day, the lowest, and the most precipitation in 24 hours — using each primary station's entire daily history (GHCN-Daily). Records span from each station's first year of observation (some go back to the 1840s) through the most recent year of data.
Climate-change signal
For each city we count what fraction of all-time daily heat records and cold records were set in the last decade. If records were spread evenly across a station's history, you'd expect roughly 5% of records per decade. Many US stations show 15-30%+ of all-time heat records set since 2015, while cold records have become rarer. This is a robust signal because each daily record (e.g. "the hottest June 4 ever") can only be held by one year — every new record literally pushes out an old one.
USDA Plant Hardiness Zones (approximation)
Official USDA zones are defined by the average annual extreme minimum temperature — the coldest temperature recorded in a typical winter. We approximate this from each station's coldest-month average low, subtracting a 15°F offset (extreme min tends to be ~15-20°F colder than mean Jan low). Bands are 10°F wide, sub-divided into "a" (colder half) and "b" (warmer half).
Accuracy: most stations fall within one half-zone of the official USDA map. For formal garden planning (especially borderline cases) check the official USDA map at planthardiness.ars.usda.gov.
Köppen-Geiger climate classification
Each city is assigned a Köppen code based on its monthly tavg and precipitation patterns, using the standard rules:
- E (polar) if no month averages above 50°F.
- A (tropical) if the coldest month averages above 64°F.
- B (arid) if total precipitation is below the temperature-based aridity threshold (varies by precipitation seasonality).
- C (temperate) if the coldest month averages between 32°F and 64°F.
- D (continental) if the coldest month averages below 32°F but the warmest is above 50°F.
Sub-letters describe precipitation seasonality (f/s/w) and summer temperature (a/b/c/d). Borderline cases between two adjacent zones may be classified differently in academic sources; our classification is internally consistent within the 1991-2020 normals.
Climate twins
For each city we compute its climate signature: a 24-dimensional vector of 12 monthly tavg values plus 12 monthly precipitation values. Each dimension is z-score normalized across the population of all US cities, so that temperature variance and precipitation variance contribute proportionally to similarity scoring.
The closest twin is the city whose vector has the smallest Euclidean distance to a given city's vector, among all US cities at least 2° latitude/longitude (~140 mi) away. The geographic constraint filters out near-neighbor matches that share a primary station (which would always be exact twins).
Heating- and cooling-degree days
HDD and CDD are standard energy-cost proxies based on a 65°F reference. For each month with tavg below 65°F, we add (65 − tavg) × 30 to the heating-degree-day total. Same idea for cooling, in the other direction. Our monthly aggregation is a simplification of the daily definition — for a station, daily aggregation produces slightly higher totals because day-to-day variability adds margin. For relative comparison between cities, the monthly approach is fine.
Best time to visit
For travel-comfort classification we tag each month one of: Excellent (avg high 65-80°F, avg low ≥ 50°F, precip < 4 in), Good (broader band but still mild), Cool, Cold (high < 45°F), Hot (high ≥ 88°F), or Wet (precip ≥ 5 in). The "best window" is the longest consecutive run of Excellent/Good months (allowing year-end wrap-around).
Daylight hours
Daylight hours per month are computed astronomically from each city's latitude and the mid-month day of year. The figure shown is the time between sunrise and sunset for that day (geometric, no atmospheric refraction or civil-twilight offset).
Caveats
- Microclimates within a metro area can differ substantially from the airport reading.
- The chosen 1991-2020 normals are already 5+ years old. Anomalies after 2020 are not reflected.
- Stations occasionally relocate or have observation gaps; NOAA's normals are adjusted but residual artifacts exist.
- This site does not currently include hurricane risk, tornado frequency, wildfire smoke, air quality, or pollen — those require different data sources.
Found a number that looks wrong? Get in touch.