ngx-echarts
TypeScript icon, indicating that this package has built-in type declarations

20.0.1 • Public • Published
Logo

NGX-ECHARTS

Angular directive for Apache ECharts

Online Demo | Starter

Table of contents

Getting Started

ngx-echarts is an Angular (ver >= 2.x) directive for ECharts (ver >= 3.x).

Latest version @npm:

  • v20.0.1 for Angular 20
  • v19.0.0 for Angular 19
  • v18.0.0 for Angular 18
  • v17.2.0 for Angular 17
  • v16.2.0 for Angular 16
  • v15.0.3 for Angular 15
  • v14.0.0 for Angular 14
  • v8.0.1 for Angular 13
  • v7.1.0 for Angular >= 11, < 13
  • v6.0.1 for Angular >= 10, < 11
  • v5.2.2 for Angular >= 6, < 10
  • v2.3.1 for Angular < 6 (Please refer to https://github.com/xieziyu/ngx-echarts/blob/v2.x/README.md)

A starter project on Github: https://github.com/xieziyu/ngx-echarts-starter

Latest Update

  • 2025.06.26: v20.0.1

    • fix: [theme] input issue #28
  • 2025.06.09: v20.0.0

    • feat: Upgrade to angular 20
    • feat: Zoneless compatibility
    • refactor: Migrate the project to modern angular patterns. (Thanks to pkurcx)

CHANGELOG.md

Installation

  • Since v5.0

    # if you use npm npm install echarts -S npm install ngx-echarts -S # or if you use yarn yarn add echarts yarn add ngx-echarts
  • If you need ECharts GL support, please install it first:

    npm install echarts-gl -S # or yarn add echarts-gl
  • Import other extensions such as themes or echarts-gl in your main.ts: ECharts Extensions

Upgrade from v4.x

  1. import echarts and provide it in NgxEchartsModule.forRoot({ echarts }).
  2. NgxEchartsCoreModule is removed.

Usage

Please refer to the demo page.

Standalone

import NgxEchartsDirective and provideEchartsCore. Or you can use provideEchartsCore to do treeshaking custom build.

import { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts'; // import echarts core import * as echarts from 'echarts/core'; // import necessary echarts components import { BarChart } from 'echarts/charts'; import { GridComponent } from 'echarts/components'; import { CanvasRenderer } from 'echarts/renderers'; echarts.use([BarChart, GridComponent, CanvasRenderer]); @Component({ selector: 'app-root', standalone: true, imports: [CommonModule, NgxEchartsDirective], templateUrl: './app.component.html', styleUrls: ['./app.component.scss'], providers: [provideEchartsCore({ echarts })], }) export class AppComponent {}

NgModule

import NgxEchartsModule:

import { NgxEchartsModule } from 'ngx-echarts'; // import echarts core import * as echarts from 'echarts/core'; // import necessary echarts components import { BarChart } from 'echarts/charts'; import { GridComponent } from 'echarts/components'; import { CanvasRenderer } from 'echarts/renderers'; echarts.use([BarChart, GridComponent, CanvasRenderer]); @NgModule({ imports: [NgxEchartsModule.forRoot({ echarts })], }) export class AppModule {}

Directive

use echarts directive in a div which has pre-defined height. (From v2.0, it has default height: 400px)

  • html:
<div echarts [options]="chartOption" class="demo-chart"></div>
  • css:
.demo-chart { height: 400px; }
  • component:
import { EChartsCoreOption } from 'echarts/core'; // ... chartOption: EChartsCoreOption = { xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], }, yAxis: { type: 'value', }, series: [ { data: [820, 932, 901, 934, 1290, 1330, 1320], type: 'line', }, ], };

API

Directive

echarts directive support following input properties:

Input Type Default Description
[options] object null The same as the options on the official demo site.
[merge] object null Used to update a part of the options, especially helpful when you need to update the chart data. In fact, the value of merge will be used in echartsInstance.setOption() with notMerge = false. Refer to ECharts documentation for details.
[loading] boolean false Used to toggle the echarts loading animation when your data is not ready.
[autoResize] boolean true If set to true, the chart will be automatically resized when the window's width is changed.
[initOpts] object null The value of [initOpts] will be used in echarts.init(). It may contain devicePixelRatio, renderer, width or height properties. Refer to ECharts documentation for details.
[theme] string null Used it to initialize echarts with theme. The theme file must also be imported in main.ts.
[loadingOpts] object null Input an object to customize the loading style. Refer to ECharts documentation for details.

By default, loadingOpts is:

{ text: 'loading', color: '#c23531', textColor: '#000', maskColor: 'rgba(255, 255, 255, 0.8)', zlevel: 0 }

ECharts API

If you need to access parts of the ECharts API such as echarts.graphic, please import it from echarts. For example:

import { graphic } from 'echarts/core'; new graphic.LinearGradient(/* ... */);

ECharts Instance

echartsInstance is exposed (since v1.1.6) in the (chartInit) event, enabling you to directly call functions like: resize(), showLoading(), etc. For example:

  • html:
<div echarts class="demo-chart" [options]="chartOptions" (chartInit)="onChartInit($event)"></div>
  • component:
onChartInit(ec) { this.echartsInstance = ec; } resizeChart() { if (this.echartsInstance) { this.echartsInstance.resize(); } }

ECharts Extensions

Import echarts theme files or other extension files after you have imported echarts core. For example:

import * as echarts from 'echarts/core'; /** echarts extensions: */ import { Bar3DChart } from 'echarts-gl/charts'; import { Grid3DComponent } from 'echarts-gl/components'; import 'echarts/theme/macarons.js'; import 'echarts/dist/extension/bmap.min.js';

Service

NgxEchartsService has been obsolete since v4.0

Events

As ECharts supports the 'click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mouseout', and 'globalout' mouse events, our ngx-echarts directive also supports the same mouse events but with an additional chart prefix. For example:

  • html:
<div echarts class="demo-chart" [options]="chartOptions" (chartClick)="onChartClick($event)"></div>
  • The '$event' is same with the 'params' that ECharts dispatches.

It supports following event outputs:

@Output Event
chartInit Emitted when the chart is initialized
chartClick echarts event: 'click'
chartDblClick echarts event: 'dblclick'
chartMouseDown echarts event: 'mousedown'
chartMouseMove echarts event: 'mousemove'
chartMouseUp echarts event: 'mouseup'
chartMouseOver echarts event: 'mouseover'
chartMouseOut echarts event: 'mouseout'
chartGlobalOut echarts event: 'globalout'
chartContextMenu echarts event: 'contextmenu'
chartHighlight echarts event: 'highlight'
chartDownplay echarts event: 'downplay'
chartSelectChanged echarts event: 'selectchanged'
chartLegendSelectChanged echarts event: 'legendselectchanged'
chartLegendSelected echarts event: 'legendselected'
chartLegendUnselected echarts event: 'legendunselected'
chartLegendLegendSelectAll echarts event: 'legendselectall'
chartLegendLegendInverseSelect echarts event: 'legendinverseselect'
chartLegendScroll echarts event: 'legendscroll'
chartDataZoom echarts event: 'datazoom'
chartDataRangeSelected echarts event: 'datarangeselected'
chartGraphRoam echarts event: 'graphroam'
chartGeoRoam echarts event: 'georoam'
chartTreeRoam echarts event: 'treeroam'
chartTimelineChanged echarts event: 'timelinechanged'
chartTimelinePlayChanged echarts event: 'timelineplaychanged'
chartRestore echarts event: 'restore'
chartDataViewChanged echarts event: 'dataviewchanged'
chartMagicTypeChanged echarts event: 'magictypechanged'
chartGeoSelectChanged echarts event: 'geoselectchanged'
chartGeoSelected echarts event: 'geoselected'
chartGeoUnselected echarts event: 'geounselected'
chartAxisAreaSelected echarts event: 'axisareaselected'
chartBrush echarts event: 'brush'
chartBrushEnd echarts event: 'brushend'
chartBrushSelected echarts event: 'brushselected'
chartGlobalCursorTaken echarts event: 'globalcursortaken'
chartRendered echarts event: 'rendered'
chartFinished echarts event: 'finished'

You can refer to the ECharts tutorial: Events and Actions in ECharts for more details of the event params. You can also refer to the demo page for a detailed example.

Custom Build

Treeshaking Custom Build

Since version 5.0.1 ECharts supports Treeshaking with NPM.

The app.modules.ts should look like this:

import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { HttpClientModule } from '@angular/common/http'; import { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts'; import { AppComponent } from './app.component'; // Import the echarts core module, which provides the necessary interfaces for using echarts. import * as echarts from 'echarts/core'; // Import bar charts, all suffixed with Chart import { BarChart } from 'echarts/charts'; // Import the tooltip, title, rectangular coordinate system, dataset and transform components import { TitleComponent, TooltipComponent, GridComponent, DatasetComponent, TransformComponent } from 'echarts/components'; // Features like Universal Transition and Label Layout import { LabelLayout, UniversalTransition } from 'echarts/features'; // Import the Canvas renderer // Note that including the CanvasRenderer or SVGRenderer is a required step import { CanvasRenderer } from 'echarts/renderers'; // Import the theme import 'echarts/theme/macarons.js'; // Register the required components echarts.use([ BarChart, TitleComponent, TooltipComponent, GridComponent, DatasetComponent, TransformComponent, LabelLayout, UniversalTransition, CanvasRenderer ]); @NgModule({ declarations: [AppComponent], imports: [ BrowserModule, HttpClientModule, // import standalone directive: NgxEchartsDirective, ], providers: [{ // Provide custom builded ECharts core: provideEchartsCore({ echarts }) }], bootstrap: [AppComponent], }) export class AppModule {}

Legacy Custom Build

Please refer to ECharts Documentation for more details.

If you want to produce a custom build of ECharts, prepare a file like custom-echarts.ts:

// custom-echarts.ts export * from 'echarts/src/echarts'; import 'echarts/src/chart/line'; import 'echarts/src/chart/bar'; // component examples: import 'echarts/src/component/tooltip'; import 'echarts/src/component/title'; import 'echarts/src/component/toolbox';

And then inject it in your NgxEchartsModule:

import { NgxEchartsModule } from 'ngx-echarts'; import * as echarts from './custom-echarts'; @NgModule({ imports: [ NgxEchartsModule.forRoot({ echarts, }), ], }) export class AppModule {}

And if you want to use the global echarts object, please import it from lib or src instead:

import * as echarts from 'echarts/lib/echarts';

If you need to import theme files, remember to change the 'echarts' path to 'echarts/lib/echarts', for example:

// ... part of echarts/theme/dark.js: function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(['exports', 'echarts/lib/echarts'], factory); } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') { // CommonJS factory(exports, require('echarts/lib/echarts')); } else { // Browser globals factory({}, root.echarts); } }

Custom Locale

You can change the chart locale registering a built-in locale (located in node_modules/echarts/lib/i18n/) or a custom locale object. To register a locale, you will need to change the module that echart is being imported (usually app.module.ts).

import {NgxEchartsModule} from "ngx-echarts"; import * as echarts from 'echarts/core'; import langCZ from 'echarts/lib/i18n/langCZ'; echarts.registerLocale("CZ", langCZ) @NgModule({ imports: [NgxEchartsModule.forRoot({echarts})], declarations: [], providers: [], bootstrap: [AppComponent] })

and in your HTML file use:

<div echarts [initOpts]="{ locale: 'CZ' }" [options]="options" class="demo-chart"></div>

Demo

You can clone this repo to your working copy and then launch the demo page in your local machine:

npm install npm run demo # or yarn install yarn demo

The demo page server is listening on: http://localhost:4202

Readme

Keywords

Package Sidebar

Install

npm i ngx-echarts

Weekly Downloads

117,300

Version

20.0.1

License

MIT

Unpacked Size

72.7 kB

Total Files

6

Last publish

Collaborators

  • xieziyu