Demonstrates the light and dark theme in SciChart.js, High Performance JavaScript Charts
drawExample.ts
index.tsx
ExampleDataProvider.ts
theme.ts
1import {
2 ECoordinateMode,
3 EHorizontalAnchorPoint,
4 FastLineRenderableSeries,
5 IThemeProvider,
6 NumberRange,
7 NumericAxis,
8 SciChartJSDarkv2Theme,
9 SciChartJSLightTheme,
10 SciChartJsNavyTheme,
11 SciChartSurface,
12 TextAnnotation,
13 XyDataSeries,
14 SweepAnimation,
15} from "scichart";
16import { ExampleDataProvider } from "../../../ExampleData/ExampleDataProvider";
17
18export const getChartsInitializationAPI = () => {
19 const createLineData = (whichSeries: number) => {
20 const data = ExampleDataProvider.getFourierSeriesZoomed(1.0, 0.1, 5.0, 5.15);
21
22 return {
23 xValues: data.xValues,
24 yValues: data.yValues.map((y) => (whichSeries === 0 ? y : whichSeries === 1 ? y * 1.1 : y * 1.5)),
25 };
26 };
27
28 const createThemedChart = async (rootElement: string | HTMLDivElement, title: string, theme: IThemeProvider) => {
29 // Create a SciChartSurface passing theme into constructor options
30 const { sciChartSurface, wasmContext } = await SciChartSurface.create(rootElement, {
31 theme,
32 });
33
34 // Create the X,Y Axis
35 sciChartSurface.xAxes.add(
36 new NumericAxis(wasmContext, {
37 labelPrecision: 2,
38 maxAutoTicks: 8,
39 })
40 );
41 sciChartSurface.yAxes.add(
42 new NumericAxis(wasmContext, {
43 labelPrecision: 2,
44 maxAutoTicks: 8,
45 growBy: new NumberRange(0.05, 0.2),
46 })
47 );
48
49 // Add title annotation
50 sciChartSurface.annotations.add(
51 new TextAnnotation({
52 text: title,
53 fontSize: 16,
54 textColor: theme.tickTextBrush,
55 x1: 0.5,
56 y1: 0,
57 opacity: 0.77,
58 horizontalAnchorPoint: EHorizontalAnchorPoint.Center,
59 xCoordinateMode: ECoordinateMode.Relative,
60 yCoordinateMode: ECoordinateMode.Relative,
61 })
62 );
63
64 let data = createLineData(2);
65
66 // Create and add a line series to the chart
67 sciChartSurface.renderableSeries.add(
68 new FastLineRenderableSeries(wasmContext, {
69 dataSeries: new XyDataSeries(wasmContext, { xValues: data.xValues, yValues: data.yValues }),
70 stroke: "auto",
71 strokeThickness: 3,
72 animation: new SweepAnimation({ duration: 500 }),
73 })
74 );
75
76 data = createLineData(1);
77
78 // Create and add a line series to the chart
79 sciChartSurface.renderableSeries.add(
80 new FastLineRenderableSeries(wasmContext, {
81 dataSeries: new XyDataSeries(wasmContext, { xValues: data.xValues, yValues: data.yValues }),
82 stroke: "auto",
83 strokeThickness: 3,
84 animation: new SweepAnimation({ duration: 500 }),
85 })
86 );
87
88 data = createLineData(0);
89
90 // Create and add a line series to the chart
91 sciChartSurface.renderableSeries.add(
92 new FastLineRenderableSeries(wasmContext, {
93 dataSeries: new XyDataSeries(wasmContext, { xValues: data.xValues, yValues: data.yValues }),
94 stroke: "auto",
95 strokeThickness: 3,
96 animation: new SweepAnimation({ duration: 500 }),
97 })
98 );
99
100 return { sciChartSurface };
101 };
102
103 const createNavyThemeChart = (divId: string | HTMLDivElement) =>
104 createThemedChart(divId, "Navy Theme", new SciChartJsNavyTheme());
105 const createLightThemeChart = (divId: string | HTMLDivElement) =>
106 createThemedChart(divId, "Light Theme", new SciChartJSLightTheme());
107 const createDarkThemeChart = (divId: string | HTMLDivElement) =>
108 createThemedChart(divId, "Dark Theme", new SciChartJSDarkv2Theme());
109 const createCustomThemeChart = (divId: string | HTMLDivElement) =>
110 createThemedChart(divId, "Custom Theme", customTheme);
111
112 return { createNavyThemeChart, createLightThemeChart, createDarkThemeChart, createCustomThemeChart };
113};
114
115// Create a custom theme based on light theme + some modifications.
116// Use applyOverrides() on a theme instance rather than spreading the theme into a plain object:
117// the spread drops the prototype, and SciChartSurface.create() rejects a plain object that has a
118// `type` but no `applyOverrides` as a Builder-API declarative theme definition.
119const customTheme = new SciChartJSLightTheme();
120customTheme.applyOverrides({
121 axisBandsFill: "#83D2F511",
122 axisBorder: "#1F3D68",
123 gridBackgroundBrush: "white",
124 gridBorderBrush: "white",
125 loadingAnimationForeground: "#6495ED77",
126 loadingAnimationBackground: "#E4F5FC",
127 majorGridLineBrush: "#264B9322",
128 minorGridLineBrush: "#264B9306",
129 sciChartBackground: "#E4F5FC",
130 tickTextBrush: "#1F3D68",
131 axisTitleColor: "#1F3D68",
132 // auto / default colour palette for lines and fills
133 strokePalette: ["#264B93", "#A16DAE", "#C52E60"],
134 fillPalette: ["#264B9333", "#A16DAE33", "#C52E6033"],
135});
136This example, "Using Theme Manager in React Chart", demonstrates how to implement multiple themed charts within a React application using SciChart.js. The sample illustrates the application of built-in and custom themes to create visually distinct charts with animated line series rendered using WebGL for high performance.
The implementation leverages the <SciChartReact/> component to integrate SciChart surfaces within React. Each chart is asynchronously initialized by functions defined in the drawExample function. These functions set up NumericAxis, add a TextAnnotation for titles, and render multiple line series with sweep animations. The example uses React hooks such as useState for managing the chart initialization functions. This showcases best practices for React integration with SciChart.js.
The example supports multiple themes including Navy (SciChartJsNavyTheme), Light (SciChartJSLightTheme), and Dark (SciChartJSDarkv2Theme) alongside a customTheme created by merging properties from a built-in theme (see IThemeProvider) using the spread operator. The customTheme, created by modifying the SciChartJSLightTheme, adjusts properties such as axis colors, grid lines, and stroke palettes. All themes support smooth animations on data series using the sweep animation type that provides a fluid visual experience. This approach aligns with advanced theming techniques outlined in SciChart documentation.
Key integration points in the example include the use of tss-react/mui for styling and a ChartGroupLoader container for grouping multiple <SciChartReact/> components in a responsive grid layout. The charts are created asynchronously and cleaned up properly, demonstrating efficient asynchronous operations and cleanup in React environments. Developers can refer to the React Charts with SciChart.js tutorial for more insights on performance optimization and custom theming strategies to tailor their implementations. Additionally, the example illustrates proper usage of React hooks and encourages the adoption of these best practices to build highly performant, data-rich web applications.
For further details on SciChart.js theming and its integration with React, visit the SciChart.js ThemeManager Documentation.

Demonstrates how to create a React Chart with background image using transparency in SciChart.js

Demonstrates how to style a React Chart entirely in code with SciChart.js themeing API

Demonstrates how to create a Custom Theme for a SciChart.js React Chart using our Theming API

Demonstrates per-point coloring in JavaScript chart types with SciChart.js PaletteProvider API

Demonstrates the different point-marker types for React Scatter charts (Square, Circle, Triangle and Custom image point-marker)

Demonstrates dashed line series in React Charts with SciChart.js

Show data labels on React Chart. Get your free demo now.

Demonstrates how to apply multiple different styles to a single series using RenderDataTransform

Demonstrates how to use a RenderDataTransform to split lines into multiple segments so they can be individually colored according to thresholds

Demonstrates chart title with different position and alignment options

The React Order of Rendering example gives you full control of the draw order of series and annotations for charts. Try SciChart's advanced customizations.