Plot = require("@observablehq/plot@0.6.16")
land = d3.json("https://cdn.jsdelivr.net/npm/world-atlas@2.0.2/land-110m.json")
.then(w => topojson.feature(w, w.objects.land))
L = transpose(nodes)
E = transpose(links)
byId = new Map(L.map(d => [d.id, d]))
famColours = ["#4E79A7","#F28E2B","#E15759","#76B7B2","#59A14F",
"#EDC948","#B07AA1","#FF9DA7","#9D9D9D"]How the world’s languages are connected through grammar
TidyTuesday 2026-11-03 · Grambank
R
interactive
maps
An interactive map of Grambank, in R and Observable: pick any of about 2,000 languages and see its 10 closest grammatical matches anywhere in the world, or the hub languages that turn up most often in others’ top-5 lists.
TidyTuesday week3 Nov 2026
Built withR · tidyverse; Observable Plot
ChartsInteractive map, k-nearest-neighbour network
Pick a language from the list, or click any dot on the map. The map highlights only that language’s 10 closest grammatical matches, numbered from most to least similar and coloured by language family. Switch to Top 10 hubs to see the languages that show up most often in other languages’ top-5 lists, each joined to its own 5 closest matches.
Closest matches to the selected language
Top 10 hubs (most connected languages)
Similarity = the share of Grambank features coded for both languages on which they give the same answer (at least 100 shared features required). Hub score = the number of languages that list this one among their 5 closest. Data: Skirgård et al. (2023), Grambank, via TidyTuesday.
One week down