I've used this as a basis for a viz of my own and it should be noted that the .data link key function ('d => [d.source, d.target]') does not work as expected. If you expand the .join into the enter, update, exit functions, the key function will not correctly identify new vs. current elements. This is likely due to the key function needing a string identifier.