The gradient overlay on the hexagonal radar, the glass-textured markers and the sequenced animation were things I had already designed in Figma as the designer. The stock features of Recharts, Chart.js and D3 could not reproduce that look and behaviour as designed.
Before committing to an implementation, I tried D3, the most flexible option, first. I implemented three charts, hexagonal radar, gauge and score, in both D3+SVG and Canvas and compared the output and the implementation cost.
What the user sees and the rendering speed were almost identical. The implementation cost was not: 65 DOM nodes versus 1, +42KB of bundle versus 0, and 49 to 82% less code in Canvas for the same effects.
With D3, every element's transition had to be controlled separately, and direct DOM manipulation did not sit well with React's rendering model.
I judged Canvas the better fit for this project, left D3 out, and implemented all eight chart types directly with the Canvas API.
↗ Why I dropped D3 (blog, Korean)