A 2D/ 3D graphing engine powered by Three.js as an alternative to D3.js

Hello,

I am working on a web-based data analytics software for a client that is powered by D3.js. At any given point, there could be over 80,000 graphed points on the scene and it’s critical that all of them are visible. The graphs are updated live and show hours worth of data at a time and are updated more than once per second. I cannot reveal the details, but I have tried multiple times to reduce the amount of data points.

While D3 works well for smaller and simpler graphs, working with large quantities of data is inefficient due to the manipulation of SVG’s. I need to display upwards of a thousand unique labels for data points at a time on the D3 UI, and the rendering of the HTML on this scale generates lag.

Is there a version of Three.JS that is for 2D/ 3D graphing and provides similar functionality to D3? A library that creates graphing similar to Desmos for example. This could also be a custom package for Three.JS that replicates aspects of D3 but is accelerated by the GPU and shaders via the Three.js pipeline.

One type of chart I need is a horizontal segmented bar chart with labels. Each bar spans a period of time with a label, with multiple bars on the same row. The text labels provide a large drop on performance because it is not accelerated by the GPU.

I would be interested in designing such a library for Three.js is one does not exist.

i don’t know of any libs that aim at replacing d3, but I do know that if you want to get 80k points at that update rate, you’re probably going to need instancing.
1000s of text labels is also going to be very tricky to make performant. Definitely a pretty big challenge as a first threejs project. :slight_smile:

1 Like

You need only rendering with webGl. There are extensions for d3 that allow you to display results using webGL, for example the one described here: Rendering One Million Datapoints with D3 and WebGL