D3 in Depth covers versions 6 and 7 of D3

Home About

D3 Chord Diagrams

Chord diagrams visualise links (or flows) between a group of nodes, where each flow has a numeric value. For example, they can show migration flows between countries. (Personally I find them difficult to interpret!)

The data needs to be in the form of an n x n matrix (where n is the number of items):

let data = [
[10, 20, 30],
[40, 60, 80],
[100, 200, 300]
];

The first row represents flows from the 1st item to the 1st, 2nd and 3rd items etc.

You create the layout using chord (imported from d3-chord):

let chordGenerator = chord();

and you configure it using .padAngle() (to set the angle between adjacent groups in radians), .sortGroups() (to specify the order of the groups), .sortSubgroups() (to sort within each group) and .sortChords() to determine the z order of the chords.

Apply the layout using:

let chords = chordGenerator(data);

which returns an array of chords. Each element of the array is an object with source and target properties. Each source and target has startAngle and endAngle properties which will define the shape of each chord.

We use the ribbon shape generator which converts the chord properties into path data (see the Shapes chapter for more information on shape generators).

let ribbonGenerator = ribbon().radius(200);

select('g')
.selectAll('path')
.data(chords)
.join('path')
.attr('d', ribbonGenerator)
BOOKS & COURSES
D3 Start to Finish book cover

Data Dashboards with JavaScript teaches you how to build data dashboards using React, Chart.js and Leaflet.

Find out more

"One of the best D3 books I've read. The contents are very clear, it is easy to follow and the concepts are very solid."

Javier García Fernández

Learn how to make a custom data visualisation using D3.js.

Find out more
D3 Start to Finish book cover

Visualising Data with JavaScript teaches you how to build charts and data stories using Chart.js, Leaflet, D3 and React.

Find out more

Learn the fundamentals of HTML, SVG, CSS and JavaScript for building data visualisations on the web.

Find out more