Stacked Line Chart in React Chart

17 Aug 202624 minutes to read

Stacked line

Follow these steps to render a stacked line series, which stacks multiple line series on top of each other to compare each one’s contribution to a total over time. To display proportional totals (100%), use StackingLine100 with the same configuration.

  1. Set the series type: Set the series type to StackingLine in the series configuration.

  2. Inject the StackingLineSeries module: Add StackingLineSeries to the services array of the Inject component inside ChartComponent. This registers the functionality required to render a stacked line series.

import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject, Legend, Category, Tooltip, DataLabel, StackingLineSeries } from '@syncfusion/ej2-react-charts';
import { chartData } from './datasource';
function App() {
    const marker = { visible: true, width: 10, height: 10, border: { width: 2, color: '#F8AB1D' } };
    return <ChartComponent id='charts' primaryXAxis={{ interval: 1, valueType: 'Category' }} primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]}/>
              <SeriesCollectionDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' width='2' type='StackingLine' marker={{ visible: true }} dashArray='5,1'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' width='2' type='StackingLine' marker={{ visible: true }} dashArray='5,1'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' width='2' type='StackingLine' marker={{ visible: true }} dashArray='5,1'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' width='2' type='StackingLine' marker={{ visible: true }} dashArray='5,1'>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>;
}
;
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject,
         Legend, Category, Tooltip, DataLabel, Zoom, Crosshair, StackingLineSeries, Selection}
from'@syncfusion/ej2-react-charts';
import { chartData } from './datasource';

function App() {

  const marker = { visible: true, width: 10, height: 10, border: { width: 2, color: '#F8AB1D' } };


  return <ChartComponent id='charts'
          primaryXAxis={{ interval: 1,  valueType: 'Category' }}
          primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]} />
              <SeriesCollectionDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' width='2' type='StackingLine' marker= {{visible: true}} dashArray='5,1'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' width='2' type='StackingLine' marker= {{visible: true}} dashArray='5,1'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' width='2' type='StackingLine' marker= {{visible: true}} dashArray='5,1'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' width='2' type='StackingLine' marker= {{visible: true}} dashArray='5,1'>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>

};
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
export let chartData = [
    { x: 'Food',          y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',     y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',       y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',       y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care', y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',         y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',       y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',   y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',           y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',      y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',     y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment', y: 75,  y1: 45, y2: 65,  y3: 115 }
];
export let chartData: Object[] = [
    { x: 'Food',          y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',     y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',       y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',       y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care', y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',         y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',       y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',   y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',           y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',      y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',     y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment', y: 75,  y1: 45, y2: 65,  y3: 115 }
];

Binding data with series

You can bind data to the chart using the dataSource property within the series configuration. This allows you to connect a JSON dataset or remote data to your chart. To display the data correctly, map the fields from the data to the chart series xName and yName properties.

import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject, Legend, Category, Tooltip, DataLabel, StackingLineSeries } from '@syncfusion/ej2-react-charts';
import { chartData } from './datasource';
function App() {
    const marker = { visible: true, width: 10, height: 10, border: { width: 2, color: '#F8AB1D' } };
    return <ChartComponent id='charts' primaryXAxis={{ interval: 1, valueType: 'Category' }} primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]}/>
              <SeriesCollectionDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' width='2' type='StackingLine' marker={{ visible: true }} dashArray='5,1'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' width='2' type='StackingLine' marker={{ visible: true }} dashArray='5,1'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' width='2' type='StackingLine' marker={{ visible: true }} dashArray='5,1'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' width='2' type='StackingLine' marker={{ visible: true }} dashArray='5,1'>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>;
}
;
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject,
         Legend, Category, Tooltip, DataLabel, Zoom, Crosshair, StackingLineSeries, Selection}
from'@syncfusion/ej2-react-charts';
import { chartData } from './datasource';

function App() {

  const marker = { visible: true, width: 10, height: 10, border: { width: 2, color: '#F8AB1D' } };


  return <ChartComponent id='charts'
          primaryXAxis={{ interval: 1,  valueType: 'Category' }}
          primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]} />
              <SeriesCollectionDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' width='2' type='StackingLine' marker= {{visible: true}} dashArray='5,1'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' width='2' type='StackingLine' marker= {{visible: true}} dashArray='5,1'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' width='2' type='StackingLine' marker= {{visible: true}} dashArray='5,1'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' width='2' type='StackingLine' marker= {{visible: true}} dashArray='5,1'>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>

};
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
export let chartData = [
    { x: 'Food',          y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',     y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',       y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',       y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care', y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',         y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',       y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',   y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',           y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',      y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',     y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment', y: 75,  y1: 45, y2: 65,  y3: 115 }
];
export let chartData: Object[] = [
    { x: 'Food',          y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',     y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',       y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',       y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care', y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',         y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',       y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',   y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',           y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',      y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',     y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment', y: 75,  y1: 45, y2: 65,  y3: 115 }
];

Series customization

Customize the stacked line series appearance with the following properties. Defaults are taken from the standard Series model.

Property Type Default Description
fill string null Color applied to the series. Accepts a CSS color or a gradient reference.
opacity number 1 Transparency of the fill (0 to 1).
dashArray string '' Pattern of dashes and gaps in the series line (e.g., "5,5").
width number 1 Stroke width of the series line, in pixels.

Solid fill

The fill property determines the color applied to the series.

import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject, Legend, Category, Tooltip, DataLabel, StackingLineSeries } from '@syncfusion/ej2-react-charts';
import { chartData } from './datasource';
function App() {
    const marker = { visible: true, width: 10, height: 10, border: { width: 2, color: '#F8AB1D' } };
    return <ChartComponent id='charts' primaryXAxis={{ interval: 1, valueType: 'Category' }} primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]}/>
              <SeriesCollectionDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' width='2' type='StackingLine' fill='blue' >
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' width='2' type='StackingLine' fill='brown' >
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' width='2' type='StackingLine' fill='yellow' >
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' width='2' type='StackingLine' fill='grey' >
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>;
}
;
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject,
         Legend, Category, Tooltip, DataLabel, Zoom, Crosshair, StackingLineSeries, Selection}
from'@syncfusion/ej2-react-charts';
import { chartData } from './datasource';

function App() {

  const marker = { visible: true, width: 10, height: 10, border: { width: 2, color: '#F8AB1D' } };


  return <ChartComponent id='charts'
          primaryXAxis={{ interval: 1,  valueType: 'Category' }}
          primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]} />
              <SeriesCollectionDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' width='2' type='StackingLine' fill='blue'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' width='2' type='StackingLine' fill='brown'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' width='2' type='StackingLine' fill='yellow'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' width='2' type='StackingLine' fill='grey'>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>

};
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
export let chartData = [
    { x: 'Food',           y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',      y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',        y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',        y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care',  y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',          y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',        y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',    y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',            y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',       y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',      y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment',  y: 75,  y1: 45, y2: 65,  y3: 115 }
];
export let chartData: Object[] = [
    { x: 'Food',           y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',      y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',        y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',        y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care',  y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',          y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',        y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',    y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',            y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',       y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',      y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment',  y: 75,  y1: 45, y2: 65,  y3: 115 }
];

Gradient fill

The fill property can be set to a CSS gradient reference such as url(#gradient) to apply a gradient color that transitions across the series. Define the gradient in an SVG <defs> block and reference it from the fill prop.

import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject, Legend, Category, Tooltip, DataLabel, StackingLineSeries } from '@syncfusion/ej2-react-charts';
import { chartData } from './datasource';
function App() {
    const marker = { visible: true, width: 10, height: 10, border: { width: 2, color: '#F8AB1D' } };
    return <ChartComponent id='charts' primaryXAxis={{ interval: 1, valueType: 'Category' }} primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]}/>
              <SeriesCollectionDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' width='2' type='StackingLine' fill='url(#gradient1)'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' width='2' type='StackingLine' fill='url(#gradient2)'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' width='2' type='StackingLine' fill='url(#gradient3)'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' width='2' type='StackingLine' fill='url(#gradient4)'>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>;
}
;
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject,
         Legend, Category, Tooltip, DataLabel, Zoom, Crosshair, StackingLineSeries, Selection}
from'@syncfusion/ej2-react-charts';
import { chartData } from './datasource';

function App() {

  const marker = { visible: true, width: 10, height: 10, border: { width: 2, color: '#F8AB1D' } };


  return <ChartComponent id='charts'
          primaryXAxis={{ interval: 1,  valueType: 'Category' }}
          primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]} />
              <SeriesCollectionDirective>
              <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' width='2' type='StackingLine' fill='url(#gradient1)'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' width='2' type='StackingLine' fill='url(#gradient2)'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' width='2' type='StackingLine' fill='url(#gradient3)'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' width='2' type='StackingLine' fill='url(#gradient4)'>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>

};
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
export let chartData = [
    { x: 'Food',           y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',      y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',        y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',        y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care',  y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',          y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',        y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',    y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',            y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',       y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',      y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment',  y: 75,  y1: 45, y2: 65,  y3: 115 }
];
export let chartData: Object[] = [
    { x: 'Food',           y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',      y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',        y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',        y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care',  y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',          y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',        y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',    y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',            y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',       y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',      y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment',  y: 75,  y1: 45, y2: 65,  y3: 115 }
];

Opacity

The opacity property controls the transparency of the fill (0 to 1) and affects how the series blends with background or overlapping series.

import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject, Legend, Category, Tooltip, DataLabel, StackingLineSeries } from '@syncfusion/ej2-react-charts';
import { chartData } from './datasource';
function App() {
    const marker = { visible: true, width: 10, height: 10, border: { width: 2, color: '#F8AB1D' } };
    return <ChartComponent id='charts' primaryXAxis={{ interval: 1, valueType: 'Category' }} primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]}/>
              <SeriesCollectionDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' width='2' type='StackingLine' opacity={0.5}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' width='2' type='StackingLine' opacity={0.5}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' width='2' type='StackingLine' opacity={0.5}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' width='2' type='StackingLine' opacity={0.5}>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>;
}
;
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject,
         Legend, Category, Tooltip, DataLabel, Zoom, Crosshair, StackingLineSeries, Selection}
from'@syncfusion/ej2-react-charts';
import { chartData } from './datasource';

function App() {

  const marker = { visible: true, width: 10, height: 10, border: { width: 2, color: '#F8AB1D' } };


  return <ChartComponent id='charts'
          primaryXAxis={{ interval: 1,  valueType: 'Category' }}
          primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]} />
              <SeriesCollectionDirective>
              <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' width='2' type='StackingLine' opacity={0.5}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' width='2' type='StackingLine' opacity={0.5}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' width='2' type='StackingLine' opacity={0.5}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' width='2' type='StackingLine' opacity={0.5}>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>

};
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
export let chartData = [
    { x: 'Food',           y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',      y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',        y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',        y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care',  y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',          y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',        y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',    y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',            y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',       y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',      y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment',  y: 75,  y1: 45, y2: 65,  y3: 115 }
];
export let chartData: Object[] = [
    { x: 'Food',           y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',      y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',        y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',        y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care',  y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',          y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',        y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',    y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',            y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',       y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',      y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment',  y: 75,  y1: 45, y2: 65,  y3: 115 }
];

Dash array

The dashArray property determines the pattern of dashes and gaps in the series line.

import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject, Legend, Category, Tooltip, DataLabel, StackingLineSeries } from '@syncfusion/ej2-react-charts';
import { chartData } from './datasource';
function App() {
    const marker = { visible: true, width: 10, height: 10, border: { width: 2, color: '#F8AB1D' } };
    return <ChartComponent id='charts' primaryXAxis={{ interval: 1, valueType: 'Category' }} primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]}/>
              <SeriesCollectionDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' width='2' type='StackingLine' dashArray='3,4'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' width='2' type='StackingLine' dashArray='3,4'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' width='2' type='StackingLine' dashArray='3,4'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' width='2' type='StackingLine' dashArray='3,4'>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>;
}
;
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject,
         Legend, Category, Tooltip, DataLabel, Zoom, Crosshair, StackingLineSeries, Selection}
from'@syncfusion/ej2-react-charts';
import { chartData } from './datasource';

function App() {

  const marker = { visible: true, width: 10, height: 10, border: { width: 2, color: '#F8AB1D' } };


  return <ChartComponent id='charts'
          primaryXAxis={{ interval: 1,  valueType: 'Category' }}
          primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]} />
              <SeriesCollectionDirective>
              <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' width='2' type='StackingLine' dashArray='3,4'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' width='2' type='StackingLine' dashArray='3,4'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' width='2' type='StackingLine' dashArray='3,4'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' width='2' type='StackingLine' dashArray='3,4'>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>

};
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
export let chartData = [
    { x: 'Food',           y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',      y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',        y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',        y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care',  y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',          y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',        y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',    y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',            y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',       y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',      y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment',  y: 75,  y1: 45, y2: 65,  y3: 115 }
];
export let chartData: Object[] = [
    { x: 'Food',           y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',      y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',        y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',        y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care',  y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',          y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',        y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',    y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',            y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',       y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',      y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment',  y: 75,  y1: 45, y2: 65,  y3: 115 }
];

Width

The width property specifies the stroke width of the series line, in pixels.

import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject, Legend, Category, Tooltip, DataLabel, StackingLineSeries } from '@syncfusion/ej2-react-charts';
import { chartData } from './datasource';
function App() {
    const marker = { visible: true, width: 10, height: 10, border: { width: 2, color: '#F8AB1D' } };
    return <ChartComponent id='charts' primaryXAxis={{ interval: 1, valueType: 'Category' }} primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]}/>
              <SeriesCollectionDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' type='StackingLine' width={5}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' type='StackingLine' width={5}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' type='StackingLine' width={5}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' type='StackingLine' width={5}>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>;
}
;
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject,
         Legend, Category, Tooltip, DataLabel, Zoom, Crosshair, StackingLineSeries, Selection}
from'@syncfusion/ej2-react-charts';
import { chartData } from './datasource';

function App() {

  const marker = { visible: true, width: 10, height: 10, border: { width: 2, color: '#F8AB1D' } };


  return <ChartComponent id='charts'
          primaryXAxis={{ interval: 1,  valueType: 'Category' }}
          primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]} />
              <SeriesCollectionDirective>
              <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' type='StackingLine' width={5}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' type='StackingLine' width={5}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' type='StackingLine' width={5}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' type='StackingLine' width={5}>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>

};
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
export let chartData = [
    { x: 'Food',           y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',      y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',        y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',        y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care',  y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',          y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',        y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',    y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',            y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',       y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',      y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment',  y: 75,  y1: 45, y2: 65,  y3: 115 }
];
export let chartData: Object[] = [
    { x: 'Food',           y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',      y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',        y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',        y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care',  y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',          y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',        y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',    y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',            y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',       y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',      y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment',  y: 75,  y1: 45, y2: 65,  y3: 115 }
];

Empty points

Data points with null or undefined values are considered empty. By default (mode: 'Gap'), empty points leave a gap in the stack; the mode property on emptyPointSettings lets you change how they are handled.

Mode

Use the mode property to control handling of empty points. Available modes: Gap, Drop, Zero, Average. The default mode is Gap.

import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject, Legend, Category, Tooltip, DataLabel, StackingLineSeries } from '@syncfusion/ej2-react-charts';
import { chartData } from './datasource';
function App() {
    const marker = { visible: true, };
    const emptyPoint = { mode: 'Average'};
    const emptyPoint1 = { mode: 'Gap'};
    return <ChartComponent id='charts' primaryXAxis={{ interval: 1, valueType: 'Category' }} primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]}/>
              <SeriesCollectionDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' type='StackingLine' marker={marker} emptyPointSettings={emptyPoint}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' type='StackingLine' marker={marker} emptyPointSettings={emptyPoint1}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>;
}
;
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject,
         Legend, Category, Tooltip, DataLabel, Zoom, Crosshair, StackingLineSeries, Selection}
from'@syncfusion/ej2-react-charts';
import { chartData } from './datasource';

function App() {

  const marker: object = { visible: true };
  const emptyPoint: object = { mode: 'Average'};
  const emptyPoint1: object = { mode: 'Gap'};

  return <ChartComponent id='charts'
          primaryXAxis={{ interval: 1,  valueType: 'Category' }}
          primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]} />
              <SeriesCollectionDirective>
              <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' type='StackingLine' marker={marker} emptyPointSettings={emptyPoint}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' type='StackingLine' marker={marker} emptyPointSettings={emptyPoint1}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>

};
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
export let chartData = [
    { x: 'Food', y: 90, y1: 40, y2: 70, y3: 120 },
    { x: 'Transport', y: 80, y1: 90, y2: 110, y3: 70 },
    { x: 'Medical', y: 50, y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes', y: null, y1: 30, y2: 60, y3: 180 },
    { x: 'Personal Care', y: 30, y1: 80, y2: 80, y3: 30 },
    { x: 'Books', y: 10, y1: 40, y2: 30, y3: 270 },
    { x: 'Fitness', y: 100, y1: 30, y2: 70, y3: 40 },
    { x: 'Electricity', y: 55, y1: 95, y2: undefined, y3: 75 },
    { x: 'Tax', y: 20, y1: 50, y2: 40, y3: 65 },
    { x: 'Pet Care', y: 40, y1: 20, y2: 80, y3: 95 },
    { x: 'Education', y: 45, y1: 15, y2: 45, y3: 195 },
    { x: 'Entertainment', y: 75, y1: 45, y2: 65, y3: 115 }
];
export let chartData: Object[] = [
    { x: 'Food', y: 90, y1: 40, y2: 70, y3: 120 },
    { x: 'Transport', y: 80, y1: 90, y2: 110, y3: 70 },
    { x: 'Medical', y: 50, y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes', y: null, y1: 30, y2: 60, y3: 180 },
    { x: 'Personal Care', y: 30, y1: 80, y2: 80, y3: 30 },
    { x: 'Books', y: 10, y1: 40, y2: 30, y3: 270 },
    { x: 'Fitness', y: 100, y1: 30, y2: 70, y3: 40 },
    { x: 'Electricity', y: 55, y1: 95, y2: undefined, y3: 75 },
    { x: 'Tax', y: 20, y1: 50, y2: 40, y3: 65 },
    { x: 'Pet Care', y: 40, y1: 20, y2: 80, y3: 95 },
    { x: 'Education', y: 45, y1: 15, y2: 45, y3: 195 },
    { x: 'Entertainment', y: 75, y1: 45, y2: 65, y3: 115 }
];

Fill

Use the fill property to set the fill color for empty points.

import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject, Legend, Category, Tooltip, DataLabel, StackingLineSeries } from '@syncfusion/ej2-react-charts';
import { chartData } from './datasource';
function App() {
    const marker = { visible: true, };
    const emptyPoint = { mode: 'Average', fill: 'red'};
    const emptyPoint1 = { mode: 'Gap'};
    return <ChartComponent id='charts' primaryXAxis={{ interval: 1, valueType: 'Category' }} primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]}/>
              <SeriesCollectionDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' type='StackingLine' marker={marker} emptyPointSettings={emptyPoint}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' type='StackingLine' marker={marker} emptyPointSettings={emptyPoint1}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>;
}
;
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject,
         Legend, Category, Tooltip, DataLabel, Zoom, Crosshair, StackingLineSeries, Selection}
from'@syncfusion/ej2-react-charts';
import { chartData } from './datasource';

function App() {

  const marker: object = { visible: true };
  const emptyPoint: object = { mode: 'Average', fill: 'red'};
  const emptyPoint1: object = { mode: 'Gap'};

  return <ChartComponent id='charts'
          primaryXAxis={{ interval: 1,  valueType: 'Category' }}
          primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]} />
              <SeriesCollectionDirective>
              <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' type='StackingLine' marker={marker} emptyPointSettings={emptyPoint}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' type='StackingLine' marker={marker} emptyPointSettings={emptyPoint1}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>

};
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
export let chartData = [
    { x: 'Food', y: 90, y1: 40, y2: 70, y3: 120 },
    { x: 'Transport', y: 80, y1: 90, y2: 110, y3: 70 },
    { x: 'Medical', y: 50, y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes', y: null, y1: 30, y2: 60, y3: 180 },
    { x: 'Personal Care', y: 30, y1: 80, y2: 80, y3: 30 },
    { x: 'Books', y: 10, y1: 40, y2: 30, y3: 270 },
    { x: 'Fitness', y: 100, y1: 30, y2: 70, y3: 40 },
    { x: 'Electricity', y: 55, y1: 95, y2: undefined, y3: 75 },
    { x: 'Tax', y: 20, y1: 50, y2: 40, y3: 65 },
    { x: 'Pet Care', y: 40, y1: 20, y2: 80, y3: 95 },
    { x: 'Education', y: 45, y1: 15, y2: 45, y3: 195 },
    { x: 'Entertainment', y: 75, y1: 45, y2: 65, y3: 115 }
];
export let chartData: Object[] = [
    { x: 'Food', y: 90, y1: 40, y2: 70, y3: 120 },
    { x: 'Transport', y: 80, y1: 90, y2: 110, y3: 70 },
    { x: 'Medical', y: 50, y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes', y: null, y1: 30, y2: 60, y3: 180 },
    { x: 'Personal Care', y: 30, y1: 80, y2: 80, y3: 30 },
    { x: 'Books', y: 10, y1: 40, y2: 30, y3: 270 },
    { x: 'Fitness', y: 100, y1: 30, y2: 70, y3: 40 },
    { x: 'Electricity', y: 55, y1: 95, y2: undefined, y3: 75 },
    { x: 'Tax', y: 20, y1: 50, y2: 40, y3: 65 },
    { x: 'Pet Care', y: 40, y1: 20, y2: 80, y3: 95 },
    { x: 'Education', y: 45, y1: 15, y2: 45, y3: 195 },
    { x: 'Entertainment', y: 75, y1: 45, y2: 65, y3: 115 }
];

Border

Use the border property to customize the border width and color for empty points.

import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject, Legend, Category, Tooltip, DataLabel, StackingLineSeries } from '@syncfusion/ej2-react-charts';
import { chartData } from './datasource';
function App() {
    const marker = { visible: true, };
    const emptyPoint = { mode: 'Average', fill: 'red', border: { width: 2 , fill: 'green'}};
    const emptyPoint1 = { mode: 'Gap'};
    return <ChartComponent id='charts' primaryXAxis={{ interval: 1, valueType: 'Category' }} primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]}/>
              <SeriesCollectionDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' type='StackingLine' marker={marker} emptyPointSettings={emptyPoint}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' type='StackingLine' marker={marker} emptyPointSettings={emptyPoint1}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>;
}
;
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject,
         Legend, Category, Tooltip, DataLabel, Zoom, Crosshair, StackingLineSeries, Selection}
from'@syncfusion/ej2-react-charts';
import { chartData } from './datasource';

function App() {

  const marker: object = { visible: true };
  const emptyPoint: object = { mode: 'Average', fill: 'red'};
  const emptyPoint1: object = { mode: 'Gap'};

  return <ChartComponent id='charts'
          primaryXAxis={{ interval: 1,  valueType: 'Category' }}
          primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]} />
              <SeriesCollectionDirective>
              <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' type='StackingLine' marker={marker} emptyPointSettings={emptyPoint}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' type='StackingLine' marker={marker} emptyPointSettings={emptyPoint1}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>

};
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
export let chartData = [
    { x: 'Food', y: 90, y1: 40, y2: 70, y3: 120 },
    { x: 'Transport', y: 80, y1: 90, y2: 110, y3: 70 },
    { x: 'Medical', y: 50, y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes', y: null, y1: 30, y2: 60, y3: 180 },
    { x: 'Personal Care', y: 30, y1: 80, y2: 80, y3: 30 },
    { x: 'Books', y: 10, y1: 40, y2: 30, y3: 270 },
    { x: 'Fitness', y: 100, y1: 30, y2: 70, y3: 40 },
    { x: 'Electricity', y: 55, y1: 95, y2: undefined, y3: 75 },
    { x: 'Tax', y: 20, y1: 50, y2: 40, y3: 65 },
    { x: 'Pet Care', y: 40, y1: 20, y2: 80, y3: 95 },
    { x: 'Education', y: 45, y1: 15, y2: 45, y3: 195 },
    { x: 'Entertainment', y: 75, y1: 45, y2: 65, y3: 115 }
];
export let chartData: Object[] = [
    { x: 'Food', y: 90, y1: 40, y2: 70, y3: 120 },
    { x: 'Transport', y: 80, y1: 90, y2: 110, y3: 70 },
    { x: 'Medical', y: 50, y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes', y: null, y1: 30, y2: 60, y3: 180 },
    { x: 'Personal Care', y: 30, y1: 80, y2: 80, y3: 30 },
    { x: 'Books', y: 10, y1: 40, y2: 30, y3: 270 },
    { x: 'Fitness', y: 100, y1: 30, y2: 70, y3: 40 },
    { x: 'Electricity', y: 55, y1: 95, y2: undefined, y3: 75 },
    { x: 'Tax', y: 20, y1: 50, y2: 40, y3: 65 },
    { x: 'Pet Care', y: 40, y1: 20, y2: 80, y3: 95 },
    { x: 'Education', y: 45, y1: 15, y2: 45, y3: 195 },
    { x: 'Entertainment', y: 75, y1: 45, y2: 65, y3: 115 }
];

Stack labels

The stack labels in stacked line, stacked area, stacked bar, and stacked column charts display cumulative total values for stack segments as inline data labels. If a stacked point has negative values, the stack labels are displayed below the point. Stack labels are independent of the dataLabel settings within each series.

import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject, Legend, Category, Tooltip, DataLabel, StackingLineSeries } from '@syncfusion/ej2-react-charts';
import { chartData } from './datasource';
function App() {
    const marker = { visible: true, width: 10, height: 10, border: { width: 2, color: '#F8AB1D' } };
    return <ChartComponent id='charts'
    primaryXAxis={{ interval: 1,  valueType: 'Category' }}
    primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}
    stackLabels={{ visible: true }}>
   <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]} />
        <SeriesCollectionDirective>
              <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' width='2' type='StackingLine' marker={{ dataLabel: { visible: true } }} dashArray='5,1'>
              </SeriesDirective>
              <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' width='2' type='StackingLine' marker={{ dataLabel: { visible: true } }} dashArray='5,1'>
              </SeriesDirective>
              <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' width='2' type='StackingLine' marker={{ dataLabel: { visible: true } }} dashArray='5,1'>
              </SeriesDirective>
              <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' width='2' type='StackingLine' marker={{ dataLabel: { visible: true } }} dashArray='5,1'>
              </SeriesDirective>
              </SeriesCollectionDirective>
   </ChartComponent>
}
;
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject,
         Legend, Category, Tooltip, DataLabel, Zoom, Crosshair, StackingLineSeries, Selection}
from'@syncfusion/ej2-react-charts';
import { chartData } from './datasource';

function App() {

  const marker = { visible: true, width: 10, height: 10, border: { width: 2, color: '#F8AB1D' } };


  return <ChartComponent id='charts'
          primaryXAxis={{ interval: 1,  valueType: 'Category' }}
          primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}
          stackLabels={{ visible: true }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]} />
              <SeriesCollectionDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' width='2' type='StackingLine' marker={{ dataLabel: { visible: true } }} dashArray='5,1'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' width='2' type='StackingLine' marker={{ dataLabel: { visible: true } }} dashArray='5,1'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' width='2' type='StackingLine' marker={{ dataLabel: { visible: true } }} dashArray='5,1'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' width='2' type='StackingLine' marker={{ dataLabel: { visible: true } }} dashArray='5,1'>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>

};
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
export let chartData = [
    { x: 'Food',          y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',     y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',       y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',       y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care', y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',         y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',       y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',   y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',           y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',      y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',     y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment', y: 75,  y1: 45, y2: 65,  y3: 115 }
];
export let chartData: Object[] = [
    { x: 'Food',          y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',     y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',       y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',       y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care', y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',         y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',       y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',   y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',           y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',      y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',     y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment', y: 75,  y1: 45, y2: 65,  y3: 115 }
];

Stack labels customization

Stack labels have various properties for customization to enhance the visual based on your requirements:

Property Type Default Description
visible boolean false Specifies whether stack labels are visible. Setting to true displays the labels.
fill string transparent Background color of the stack labels. Accepts valid CSS color strings (hex, RGBA, etc.).
format string null Format string for the label text. Supports placeholders such as {value}.
angle number 0 Rotation angle for stack labels in degrees.
rx number 5 Rounded corner radius along the X-axis for the stack label background.
ry number 5 Rounded corner radius along the Y-axis for the stack label background.
margin MarginModel null Margin around the stack label (left, right, top, bottom).
border BorderModel null Border appearance of the stack label.
font StackLabelsFontModel null Font customization (size, color, fontStyle, fontWeight, fontFamily).
import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject, Legend, Category, Tooltip, DataLabel, StackingLineSeries } from '@syncfusion/ej2-react-charts';
import { chartData } from './datasource';
function App() {
    const marker = { visible: true, width: 10, height: 10, border: { width: 2, color: '#F8AB1D' } };
    return <ChartComponent id='charts'
    primaryXAxis={{ interval: 1,  valueType: 'Category' }}
    primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}
    stackLabels={{ visible: true, fill: 'rgba(0, 123, 255, 0.5)', format: '{value}', angle: 45, rx: 10, ry: 10, margin: { left: 10, right: 10, top: 10, bottom: 10 }, border: { width: 2, color: '#000' }, font: { size: '14px', color: '#fff', weight: 'bold', family: 'Arial', textAlignment: 'Left' } }}>
   <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]} />
        <SeriesCollectionDirective>
              <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' width='2' type='StackingLine' marker={{ dataLabel: { visible: true } }} dashArray='5,1'>
              </SeriesDirective>
              <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' width='2' type='StackingLine' marker={{ dataLabel: { visible: true } }} dashArray='5,1'>
              </SeriesDirective>
              <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' width='2' type='StackingLine' marker={{ dataLabel: { visible: true } }} dashArray='5,1'>
              </SeriesDirective>
              <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' width='2' type='StackingLine' marker={{ dataLabel: { visible: true } }} dashArray='5,1'>
              </SeriesDirective>
              </SeriesCollectionDirective>
   </ChartComponent>
}
;
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject,
         Legend, Category, Tooltip, DataLabel, Zoom, Crosshair, StackingLineSeries, Selection}
from'@syncfusion/ej2-react-charts';
import { chartData } from './datasource';

function App() {

  const marker = { visible: true, width: 10, height: 10, border: { width: 2, color: '#F8AB1D' } };


  return <ChartComponent id='charts'
          primaryXAxis={{ interval: 1,  valueType: 'Category' }}
          primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }}
          stackLabels={{ visible: true, fill: 'rgba(0, 123, 255, 0.5)', format: '{value}', angle: 45, rx: 10, ry: 10, margin: { left: 10, right: 10, top: 10, bottom: 10 }, border: { width: 2, color: '#000' }, font: { size: '14px', color: '#fff', weight: 'bold', family: 'Arial', textAlignment: 'Left' } }}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]} />
              <SeriesCollectionDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' width='2' type='StackingLine' marker={{ dataLabel: { visible: true } }} dashArray='5,1'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' width='2' type='StackingLine' marker={{ dataLabel: { visible: true } }} dashArray='5,1'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' width='2' type='StackingLine' marker={{ dataLabel: { visible: true } }} dashArray='5,1'>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' width='2' type='StackingLine' marker={{ dataLabel: { visible: true } }} dashArray='5,1'>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>

};
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
export let chartData = [
    { x: 'Food',          y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',     y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',       y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',       y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care', y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',         y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',       y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',   y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',           y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',      y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',     y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment', y: 75,  y1: 45, y2: 65,  y3: 115 }
];
export let chartData: Object[] = [
    { x: 'Food',          y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',     y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',       y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',       y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care', y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',         y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',       y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',   y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',           y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',      y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',     y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment', y: 75,  y1: 45, y2: 65,  y3: 115 }
];

Events

Series render

The seriesRender event fires before each series is rendered and lets you modify series properties such as data, fill, or name. For a stacked line series, use it to vary per-series fill between renders.

import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject, Legend, Category, Tooltip, DataLabel, StackingLineSeries } from '@syncfusion/ej2-react-charts';
import { chartData } from './datasource';
function App() {
    const marker = { visible: true, };
    const seriesRender = (args) => {
     if (args.series.index === 0) {
         args.fill = '#ff4251';
     }
     else if (args.series.index === 1) {
         args.fill = '#4C4C4C';
     }
     else if (args.series.index === 2) {
         args.fill = '#794F1B';
     }
     else if (args.series.index === 3) {
         args.fill = '#1a9a6f';
     }
 }
    return <ChartComponent id='charts' primaryXAxis={{ interval: 1, valueType: 'Category' }} primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }} seriesRender={seriesRender}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]}/>
              <SeriesCollectionDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>;
}
;
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject,
         Legend, Category, Tooltip, DataLabel, Zoom, Crosshair, StackingLineSeries, IseriesRenderEventArgs}
from'@syncfusion/ej2-react-charts';
import { chartData } from './datasource';

function App() {

  const marker: object = { visible: true };
  const seriesRender = (args: IseriesRenderEventArgs) => {
    if (args.series.index === 0) {
        args.fill = '#ff4251';
    }
    else if (args.series.index === 1) {
        args.fill = '#4C4C4C';
    }
    else if (args.series.index === 2) {
        args.fill = '#794F1B';
    }
    else if (args.series.index === 3) {
        args.fill = '#1a9a6f';
    }
};

  return <ChartComponent id='charts'
          primaryXAxis={{ interval: 1,  valueType: 'Category' }}
          primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }} seriesRender={seriesRender}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]} />
              <SeriesCollectionDirective>
              <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>

};
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
export let chartData = [
    { x: 'Food',           y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',      y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',        y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',        y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care',  y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',          y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',        y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',    y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',            y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',       y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',      y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment',  y: 75,  y1: 45, y2: 65,  y3: 115 }
];
export let chartData: Object[] = [
    { x: 'Food',           y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',      y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',        y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',        y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care',  y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',          y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',        y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',    y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',            y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',       y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',      y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment',  y: 75,  y1: 45, y2: 65,  y3: 115 }
];

Point render

The pointRender event fires before each data point is drawn, letting you customize per-point marker shape, border, or fill. For a stacked line series, use it to highlight specific points or apply conditional formatting.

import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject, Legend, Category, Tooltip, DataLabel, StackingLineSeries } from '@syncfusion/ej2-react-charts';
import { chartData } from './datasource';
function App() {
    const marker = { visible: true, };
    const pointRender = (args) => {
        if (args.point.y < 100) {
            args.fill = '#ff6347';
        }
        else {
            args.fill = '#009cb8';
        }
 }
    return <ChartComponent id='charts' primaryXAxis={{ interval: 1, valueType: 'Category' }} primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }} pointRender={pointRender}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]}/>
              <SeriesCollectionDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>;
}
;
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject,
         Legend, Category, Tooltip, DataLabel, Zoom, Crosshair, StackingLineSeries, IPointRenderEventArgs}
from'@syncfusion/ej2-react-charts';
import { chartData } from './datasource';

function App() {

  const marker: object = { visible: true };
  const pointRender = (args: IPointRenderEventArgs) => {
    if (args.point.y < 100) {
        args.fill = '#ff6347';
    }
    else {
        args.fill = '#009cb8';
    }
};

  return <ChartComponent id='charts'
          primaryXAxis={{ interval: 1,  valueType: 'Category' }}
          primaryYAxis={{ title: 'Expense', minimum: 0, maximum: 400, interval: 100, labelFormat: '${value}' }} pointRender={pointRender}>
         <Inject services={[StackingLineSeries, Legend, Tooltip, DataLabel, Category]} />
              <SeriesCollectionDirective>
              <SeriesDirective dataSource={chartData} xName='x' yName='y' name='John' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y1' name='Peter' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y2' name='Steve' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    <SeriesDirective dataSource={chartData} xName='x' yName='y3' name='Charle' type='StackingLine' marker={marker}>
                    </SeriesDirective>
                    </SeriesCollectionDirective>
         </ChartComponent>

};
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
export let chartData = [
    { x: 'Food',           y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',      y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',        y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',        y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care',  y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',          y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',        y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',    y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',            y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',       y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',      y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment',  y: 75,  y1: 45, y2: 65,  y3: 115 }
];
export let chartData: Object[] = [
    { x: 'Food',           y: 90,  y1: 40, y2: 70,  y3: 120 },
    { x: 'Transport',      y: 80,  y1: 90, y2: 110, y3: 70 },
    { x: 'Medical',        y: 50,  y1: 80, y2: 120, y3: 50 },
    { x: 'Clothes',        y: 70,  y1: 30, y2: 60,  y3: 180 },
    { x: 'Personal Care',  y: 30,  y1: 80, y2: 80,  y3: 30 },
    { x: 'Books',          y: 10,  y1: 40, y2: 30,  y3: 270 },
    { x: 'Fitness',        y: 100, y1: 30, y2: 70,  y3: 40 },
    { x: 'Electricity',    y: 55,  y1: 95, y2: 55,  y3: 75 },
    { x: 'Tax',            y: 20,  y1: 50, y2: 40,  y3: 65 },
    { x: 'Pet Care',       y: 40,  y1: 20, y2: 80,  y3: 95 },
    { x: 'Education',      y: 45,  y1: 15, y2: 45,  y3: 195 },
    { x: 'Entertainment',  y: 75,  y1: 45, y2: 65,  y3: 115 }
];

See also