uPlot icon indicating copy to clipboard operation
uPlot copied to clipboard

setSeries hook: Allow distinguishing between toggling a series vs. just hovering

Open juliusv opened this issue 1 year ago • 0 comments

I want to mislead my users with stacked graphs, so I adopted the stacking code from https://leeoniya.github.io/uPlot/demos/stack.js (used by https://leeoniya.github.io/uPlot/demos/stacked-series.html).

It uses the setSeries hook to restack things when a series has been shown or hidden:

// restack on toggle
	opts.hooks = {
		setSeries: [
			(u, i) => {
				let stacked = stack(data, i => !u.series[i].show);
				u.delBand(null);
				stacked.bands.forEach(b => u.addBand(b));
				u.setData(stacked.data);
			}
		],
	};

However, the setSeries hook also fires when just hovering and focusing a series, so by just hovering over a graph with many series, a lot of extra computations are taking place and things get slow.

Is there a nice way to distinguish between toggling a series vs. just hover-focusing, or would this require code changes to uPlot?

I guess I could do it right now by manually remembering & comparing the show states of all series between hook firings, but it would be nice to be able to just tell them apart.

juliusv avatar Aug 16 '24 14:08 juliusv