The heatmap is supposed to be fully dynamic, enabling real-time graphics. The UniformHeatmapRenderableSeries however does not support append, insert, update, remove functions like other DataSeries do.
You can however update the data and force a refresh simply by updating the data passed in by calling heatmapDataSeries.setZValues() with a new 2-dimensional array, or by modifying part of the existing the 2d array and calling heatmapDataSeries.notifyDataChanged().
Here's a full working example below:
<div id="scichart-root" ></div>
body { margin: 0; } #scichart-root { width: 100%; height: 100vh; }
// This function generates data for the heatmap series example function generateExampleData( width, height, cpMax, index, maxIndex ) { const { zeroArray2D } = SciChart; // or, import { zeroArray2D } from "SciChart"; // Returns a 2-dimensional javascript array [height (y)] [width (x)] size const zValues = zeroArray2D([height, width]); const angle = (Math.PI * 2 * index) / maxIndex; // When appending data to a 2D Array for the heatmap, the order of appending (X,Y) does not matter // but when accessing the zValues[][] array, we set data [y] then [x] for (let y = 0; y < height; y++) { for (let x = 0; x < width; x++) { const v = (1 + (Math.sin(x * 0.02 + angle))) * 50 + (1 + (Math.sin(y * 0.05 + angle))) * 50 * (1 + (Math.sin(angle * 2))); const cx = width / 2; const cy = height / 2; const r = Math.sqrt((x - cx) * (x - cx) + (y - cy) * (y - cy)); const exp = Math.max(0, 1 - r * 0.008); const zValue = v * exp + Math.random() * 10; zValues[y][x] = zValue > cpMax ? cpMax : zValue; } } return zValues; } async function updatingHeatmapChart(divElementId) { // #region ExampleA // Demonstrates how to create a uniform heatmap chart with SciChart.js const { SciChartSurface, NumericAxis, HeatmapColorMap, UniformHeatmapDataSeries, UniformHeatmapRenderableSeries, SciChartJsNavyTheme } = SciChart; // or, for npm, import { SciChartSurface, ... } from "scichart" // Create a SciChartSurface with X & Y Axis const { wasmContext, sciChartSurface } = await SciChartSurface.create(divElementId, { theme: new SciChartJsNavyTheme() }); sciChartSurface.xAxes.add(new NumericAxis(wasmContext)); sciChartSurface.yAxes.add(new NumericAxis(wasmContext)); const WIDTH = 100; const HEIGHT = 75; const MAX_SERIES = 200; let index = 20; // Create a Heatmap Data-series. Pass heatValues as a number[][] to the UniformHeatmapDataSeries // Open the Codepen below to see the definition of this function const initialZValues = generateExampleData(WIDTH, HEIGHT, 200, index, MAX_SERIES); const heatmapDataSeries = new UniformHeatmapDataSeries(wasmContext, { xStart: 0, xStep: 1, yStart: 0, yStep: 1, zValues: initialZValues }); // Create a Heatmap RenderableSeries with the color map. ColorMap.minimum/maximum defines the values in // HeatmapDataSeries which correspond to gradient stops at 0..1 const heatmapSeries = new UniformHeatmapRenderableSeries(wasmContext, { dataSeries: heatmapDataSeries, useLinearTextureFiltering: false, colorMap: new HeatmapColorMap({ minimum: 0, maximum: 200, gradientStops: [ { offset: 1, color: "#EC0F6C" }, { offset: 0.9, color: "#F48420" }, { offset: 0.7, color: "#DC7969" }, { offset: 0.5, color: "#67BDAF" }, { offset: 0.3, color: "#50C7E0" }, { offset: 0.2, color: "#264B93" }, { offset: 0, color: "#14233C" } ] }) }); sciChartSurface.renderableSeries.add(heatmapSeries); const updateChart = () => { // Cycle through generating data on timer tick. In reality this can be any [][] 2d array const newZValues = generateExampleData(WIDTH, HEIGHT, 200, index++, MAX_SERIES); // Update the heatmap z-values heatmapDataSeries.setZValues(newZValues); if (index >= MAX_SERIES) { index = 0; } setTimeout(updateChart, 20); }; updateChart(); // #endregion // Add zooming, panning for the example const { ZoomPanModifier, ZoomExtentsModifier, MouseWheelZoomModifier } = SciChart; sciChartSurface.chartModifiers.add(new ZoomPanModifier(), new ZoomExtentsModifier(), new MouseWheelZoomModifier()); }; updatingHeatmapChart("scichart-root");
The source-code for that example can be found below:
Updating the XStep, XStart, YStep, YStart or changing the size of heatmap
At the time of writing we have no way to update the xStep, xStart, yStep, yStart properties of a UniformHeatmapDataSeries once it has been created, but a workaround was posted at the SciChart Forum.