Chart annotations in EJ2 TypeScript Chart control
8 May 202313 minutes to read
Annotations are used to mark the specific area of interest in the chart area with texts, shapes or images.
You can add annotations to the chart by using the annotations
option. By using the content
option of annotation object, you can specify either the id of the element or directly specify the element in the content that needs to be displayed in the chart area.
import { Chart, ColumnSeries, Category, ChartAnnotation } from '@syncfusion/ej2-charts';
import { columnData } from './datasource.ts';
Chart.Inject(ColumnSeries, Category, ChartAnnotation);
let chart: Chart = new Chart({
primaryXAxis: {
valueType: 'Category',
},
annotations:[{
content: '70 Gold Medals',
coordinateUnits: 'Point',
x: 'France',
y: 50
}],
series:[{
dataSource: columnData,
xName: 'country', yName: 'gold',
type: 'Column'
}],
}, '#element');
<!DOCTYPE html>
<html lang="en">
<head>
<title>EJ2 Animation</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Typescript UI Controls" />
<meta name="author" content="Syncfusion" />
<link href="index.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="systemjs.config.js"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id='loader'>Loading....</div>
<div id='container'>
<div id='element'></div>
<div id='element1'></div>
</div>
</body>
</html>
Note: To use annotations feature, we need to inject
ChartAnnotation
usingChart.Inject(ChartAnnotation)
method.
Region
Annotations can be placed either with respect to Series
or Chart
. by default, it will placed with respect to Chart
.
import { Chart, ColumnSeries, Category, ChartAnnotation } from '@syncfusion/ej2-charts';
import { columnData } from './datasource.ts';
Chart.Inject(ColumnSeries, Category, ChartAnnotation);
let chart: Chart = new Chart({
primaryXAxis: {
valueType: 'Category',
},
annotations:[{
content: '<div>Highest Medal Count</div>',
region: 'Series',
coordinateUnits: 'Point',
x: 'France',
y: 50
}],
series:[{
dataSource: columnData,
xName: 'country', yName: 'gold',
type: 'Column'
}],
}, '#element');
<!DOCTYPE html>
<html lang="en">
<head>
<title>EJ2 Animation</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Typescript UI Controls" />
<meta name="author" content="Syncfusion" />
<link href="index.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="systemjs.config.js"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id='loader'>Loading....</div>
<div id='container'>
<div id='element'></div>
<div id='element1'></div>
</div>
</body>
</html>
Co-ordinate Units
Specified the coordinates units of the annotation either Pixel
or Point
.
import { Chart, ColumnSeries, Category, ChartAnnotation } from '@syncfusion/ej2-charts';
import { columnData } from './datasource.ts';
Chart.Inject(ColumnSeries, Category, ChartAnnotation);
let chart: Chart = new Chart({
primaryXAxis: {
valueType: 'Category',
},
annotations:[{
content: '<div style="border: 1px solid black; padidng: 5px 5px 5px 5px, backgrund:#f5f5f5">Annotation in Pixel</div>',
coordinateUnits: 'Pixel',
x: 150,
y: 50
}],
series:[{
dataSource: columnData,
xName: 'country', yName: 'gold',
type: 'Column'
}],
}, '#element');
<!DOCTYPE html>
<html lang="en">
<head>
<title>EJ2 Animation</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Typescript UI Controls" />
<meta name="author" content="Syncfusion" />
<link href="index.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="systemjs.config.js"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id='loader'>Loading....</div>
<div id='container'>
<div id='element'></div>
<div id='element1'></div>
</div>
</body>
</html>
Alignment
Annotation provides verticalAlignment
and horizontalAlignment
. The verticalAlignment
can be customized via Top
, Bottom
or Middle
and the horizontalAlignment
can be customized via Near
, Far
or Center
.
import { Chart, ColumnSeries, Category, ChartAnnotation } from '@syncfusion/ej2-charts';
import { columnData } from './datasource.ts';
Chart.Inject(ColumnSeries, Category, ChartAnnotation);
let chart: Chart = new Chart({
primaryXAxis: {
valueType: 'Category',
},
annotations:[{
content: '<div style="border: 1px solid black; padidng: 5px 5px 5px 5px, backgrund:#f5f5f5">Highest Medal Count</div>',
x: 'France',
y: 50,
verticalAlignment:'Top',
horizontalAlignment:'Near'
}],
series:[{
dataSource: columnData,
xName: 'country', yName: 'gold',
type: 'Column'
}],
}, '#element');
<!DOCTYPE html>
<html lang="en">
<head>
<title>EJ2 Animation</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Typescript UI Controls" />
<meta name="author" content="Syncfusion" />
<link href="index.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="systemjs.config.js"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id='loader'>Loading....</div>
<div id='container'>
<div id='element'></div>
<div id='element1'></div>
</div>
</body>
</html>
Adding y-axis sub title through on annotation
By setting text div in the content
option of annotation object you can add sub title to chart y-axis. Specified the coordinate
value as pixel
and customize x and y location of the text.
import { Chart, ColumnSeries, Category, ChartAnnotation } from '@syncfusion/ej2-charts';
import { columnData } from './datasource.ts';
Chart.Inject(ColumnSeries, Category, ChartAnnotation);
let chart: Chart = new Chart({
primaryXAxis: {
valueType: 'Category',
},
primaryYAxis: {
title: '(m2/min)'
},
annotations: [{
content: '<div id="text" style="transform: rotate(-90deg);">Speed Rate</div>',
x: 6,
y: 180,
coordinateUnits: 'Pixel',
Region: 'Chart'
}],
series: [{
dataSource: columnData,
xName: 'country', yName: 'gold',
type: 'Column'
}],
}, '#element');
<!DOCTYPE html>
<html lang="en">
<head>
<title>EJ2 Animation</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Typescript UI Controls" />
<meta name="author" content="Syncfusion" />
<link href="index.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="systemjs.config.js"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id='loader'>Loading....</div>
<div id='container'>
<div id='element'></div>
<div id='element1'></div>
</div>
</body>
</html>