All thirty days

Day 4: Clusters

Every official lake name in Canada, 136,275 of them, coloured by the word each one uses for lake: Lake, Lac, or a name in an Indigenous language.

lakes.json
Loading 136,275 lake names
Show or hide
Click a dot for its name.

Lakes are the largest group in the Canadian Geographical Names Database: 136,275 official names, counting ponds and reservoirs. Each dot is one name, coloured by its generic, the word that says it is a lake. Two clusters fill the country and meet at a line: 60,055 of the 60,461 Lac names are in Quebec.

That line is a provincial border, not a map of who speaks what. Each province makes its own names official, and Quebec's are in French. Ontario has 22,073 Lake names and 137 Lac. Quebec has 27 names with an English generic, such as Le Beaver Pond, and 14 of them sit together on the Lower North Shore, next to Labrador. Lac names outside Quebec make small clusters of their own: 19 around St. Paul in east-central Alberta, and 33 in the Northwest Territories.

The magenta dots are the 7,822 names the database records in an Indigenous language, 68 languages in all, and they cluster where each one is spoken. East Cree has 1,618, all in Quebec, east of James Bay. Inuktitut has 1,527 across Nunavik and Nunavut, and Innu 946 on Quebec's North Shore and in Labrador. Some lakes have two official names at one point: click Kluane Lake in the Yukon and you get Kluane Lake, recorded in Tlingit, and Łù'àn Mǟn, in Southern Tutchone.

A script sorts the names, and it reads only two things: the language the database records and the generic word. So the magenta count is a floor. A name of Indigenous origin that the database does not tag counts by its generic, or in grey if it has none. The 378 grey dots are names with no generic the script knows, among them 32 Scottish lochs. A dot marks where the database puts the name, not the lake's shoreline, so Great Bear Lake is one dot like any pond.

How it's made

One basemap and one layer. This is the whole map, minus the legend.

import { createMap } from '@unmap/sdk'

// Sort each official lake name by the word it uses for lake.
const generic = (name, language) => {
  if (isIndigenous(language)) return 'indigenous' // the language the CGNDB records
  if (/^((petit|grand)e?s? )?(lac|lacs|étang|réservoir)\b/i.test(name)) return 'lac'
  if (/\b(lake|lakes|pond|ponds|reservoir|steady)\b/i.test(name)) return 'lake'
  return 'other'
}

const map = createMap({ key: 'um_live_...', container: '#map', style: 'muted' })

map.on('load', () => {
  map.addSource('lakes', { type: 'geojson', data: lakes }) // 136,275 points, one per name
  const labels = map.getStyle().layers.find((l) => l.type === 'symbol').id
  map.addLayer({
    id: 'lakes',
    type: 'circle',
    source: 'lakes',
    paint: {
      'circle-radius': 1.5,
      'circle-color': ['match', ['get', 'generic'],
        'lake', '#4FB3E8', 'lac', '#F2B84B', 'indigenous', '#FF3E9A', '#8FA3A8'],
    },
  }, labels) // under the place names
})

The data is the national CSV from the Canadian Geographical Names Database, filtered to its lake code, which also covers ponds, reservoirs and Newfoundland's steadies. A short script in the unmap repository sorts each name: Indigenous if the database records an Indigenous language for it, otherwise Lac if a French generic leads the name, Lake if it holds an English one, and other if it has neither. Every official name is a dot, so a lake with two names is two dots at one point, and a lake on a border is named once by each province. The basemap is unmap's muted style, which is greyscale so the data carries all the colour. The page and the script were written with an AI coding assistant (Claude).

Data

  • Canadian Geographical Names Database, Natural Resources Canada. Contains information licensed under the Open Government Licence - Canada. File published 27 October 2026.
  • Basemap: unmap, © OpenStreetMap contributors.

Share this map

Post it, or make your own and tag it #30DayMapChallenge.