I have a large data set that I can’t really load into memory at once so instead I am paging the data, grabbing only what I require plus a little buffer either side so that the graph always has something in it.
To implement paging I need to change the position at which the graph starts rendering, unfortunately it seems that it is not possible to change UniformHeatmapDataSeries.xStart as set in the constructor.
Is the only way around this to recreate the heatmap from scratch every time a new page is loaded or am I missing another trick?
- Paul Hodgson asked 2 years ago
- You must login to post comments
Hi Paul
The UniformHeatmapDataSeries doesn’t have a way to modify or change the xStart, xStep, yStart, yStep properties after construction. However, the heatmap simply wraps a 2d array so the overhead to create a new UniformHeatmapDataSeries and assign it to the RenderableSeries is quite low.
This is how you might update the heatmap series position dynamically:
const zValues: number[][] = ...
const heatmapData = new UniformHeatmapDataSeries(webAssemblyContext, {
xStart: 0,
xStep: 1,
yStart: 0,
yStep: 1,
zValues
});
const heatmapRenderSeries = new UniformHeatmapRenderableSeries(webAssemblyContext, { dataSeries: heatmapData });
// Later, you want to update data but not recreate the chart
heatmapRenderSeries.dataSeries = new UniformHeatmapDataSeries(webAssemblyContext, {
xStart: 100,
xStep: 1,
yStart: 100,
yStep: 1,
zValues
});
Any time you assign a new UniformHeatmapDataSeries to the RenderableSeries.DataSeries property the chart will redraw.
Note: you can have multiple heatmap series on a single SciChartSurface (tiling is possible). I would suggest as well as paging to tile and create new heatmap RenderableSeries/DataSeries pairs and add them on to the chart, removing when the chart zooms them out of scope. The memory is held in the zValues[][] array passed into UniformHeatmapDataSeries constructor so if you want to be memory efficient, re-use that array.
Lastly, don’t forget if you do remove and discard any RenderableSeries/DataSeries from a SciChartSurface to call .delete() on them to ensure any native memory is freed.
Let me know if this helps
Best regards,
Andrew
- Andrew Burnett-Thompson answered 2 years ago
- You must login to post comments
Thanks Andrew, this is pretty much the approach I’ve taken now although the tiling idea could be a useful optimisation.
Regards
Paul
- Paul Hodgson answered 2 years ago
-
I logged it as a potential improvement in our backlog here: https://abtsoftware.myjetbrains.com/youtrack/issue/SCJS-1113
- You must login to post comments
Please login first to submit.