Creates a React Stacked Radial Column Chart representing Olympic medals per country, using SciChart.js
import {
PolarMouseWheelZoomModifier,
PolarZoomExtentsModifier,
PolarPanModifier,
XyDataSeries,
PolarNumericAxis,
SciChartPolarSurface,
EPolarAxisMode,
NumberRange,
EAxisAlignment,
EXyDirection,
PolarCategoryAxis,
TextLabelProvider,
PolarStackedColumnCollection,
PolarStackedColumnRenderableSeries,
EPolarLabelMode,
PolarLegendModifier,
ELegendPlacement,
GradientParams,
Point,
WaveAnimation,
} from "scichart";
import { appTheme } from "./appTheme";
const DATA: Record<string, number[]> = {
Norway: [122, 125, 111],
USA: [105, 110, 88],
Germany: [92, 88, 60],
Canada: [73, 64, 62],
Austria: [64, 81, 87],
Sweden: [57, 46, 55],
Switzerland: [56, 45, 52],
Russia: [47, 38, 35],
Netherlands: [45, 44, 41],
Finland: [43, 55, 59],
};
const COUNTRIES = Object.keys(DATA);
const MEDALS = [
{
type: "Gold",
color: appTheme.MutedOrange,
},
{
type: "Silver",
color: appTheme.PaleBlue,
},
{
type: "Bronze",
color: appTheme.MutedRed,
},
];
export const drawExample = async (rootElement: string | HTMLDivElement) => {
const { sciChartSurface, wasmContext } = await SciChartPolarSurface.create(rootElement, {
theme: appTheme.SciChartJsTheme,
title: "Winter Olympic medals per country",
titleStyle: {
fontSize: 24,
},
});
// Create Polar, Radial axes
const xAxis = new PolarCategoryAxis(wasmContext, {
polarAxisMode: EPolarAxisMode.Radial,
axisAlignment: EAxisAlignment.Left,
visibleRange: new NumberRange(-1, 9),
zoomExtentsToInitialRange: true,
autoTicks: false,
majorDelta: 1,
useNativeText: true,
flippedCoordinates: true, // Norway will be outermost, Finland innermost
innerRadius: 0.1, // donut hole
drawMinorTickLines: false,
drawMinorGridLines: false,
drawMajorTickLines: false,
startAngle: Math.PI,
});
xAxis.labelProvider = new TextLabelProvider({
labels: Object.keys(DATA),
});
sciChartSurface.xAxes.add(xAxis);
const yAxis = new PolarNumericAxis(wasmContext, {
polarAxisMode: EPolarAxisMode.Angular,
axisAlignment: EAxisAlignment.Top,
polarLabelMode: EPolarLabelMode.Parallel,
drawMinorTickLines: false,
drawMinorGridLines: false,
drawMajorTickLines: false,
flippedCoordinates: true,
labelPrecision: 0,
useNativeText: true,
autoTicks: false,
majorDelta: 25,
startAngle: Math.PI,
totalAngle: (Math.PI * 3) / 2, // 270 degrees, 3/4 of the circle
});
sciChartSurface.yAxes.add(yAxis);
// SERIES
const collection = new PolarStackedColumnCollection(wasmContext);
collection.animation = new WaveAnimation({ duration: 1000, fadeEffect: true });
const xValues = Array.from({ length: COUNTRIES.length }, (_, i) => i);
for (let i = 0; i < 3; i++) {
const polarColumn = new PolarStackedColumnRenderableSeries(wasmContext, {
dataSeries: new XyDataSeries(wasmContext, {
xValues,
yValues: COUNTRIES.map((country) => DATA[country][i]),
dataSeriesName: MEDALS[i].type,
}),
// stroke: "white",
strokeThickness: 1.5,
fill: MEDALS[i].color, // keep the "fill" although overriden by "fillLinearGradient" for legend marker color
fillLinearGradient: new GradientParams(new Point(0, 0), new Point(0, 1), [
{ color: MEDALS[i].color, offset: 0.5 },
{ color: "#222222", offset: 1 },
]),
});
collection.add(polarColumn);
}
sciChartSurface.renderableSeries.add(collection);
// MODIFIERS
sciChartSurface.chartModifiers.add(
new PolarPanModifier({
xyDirection: EXyDirection.XyDirection,
zoomSize: true,
growFactor: 1,
}),
new PolarZoomExtentsModifier(),
new PolarMouseWheelZoomModifier(),
new PolarLegendModifier({
placement: ELegendPlacement.TopLeft,
backgroundColor: "rgba(0,0,0,0.3)",
showCheckboxes: true,
})
);
return { sciChartSurface, wasmContext };
};
This React example showcases a Polar Stacked Radial Column Chart using SciChart's SciChart React component. It visualizes Olympic medal data with stacked radial columns, demonstrating React integration with SciChart's polar charts.
The chart is initialized via the initChart prop passed to <SciChartReact/>, creating a SciChartPolarSurface with radial columns. The implementation uses React's component structure while leveraging SciChart's WebAssembly core for high performance.
The chart features medal data grouped by country with PolarStackedColumnRenderableSeries for each medal type. Interactive elements include PolarMouseWheelZoomModifier and a configurable legend.
The example demonstrates proper React integration patterns using SciChart's dedicated React component. The async initialization and theme application follow React best practices for data visualization components.




















