An Angular wrapper for Highcharts, providing easy integration of Highcharts, Highstock, Highmaps, and Highcharts Gantt charts into your Angular applications.
- Requirements
- Installation
- Usage
- API Documentation
- Using Highcharts Modules
- Troubleshooting
- Demo
- Contributing
- License
| Package | Version |
|---|---|
| Angular | >=21.0.0 |
| Highcharts | >=11.0.0 |
Install both angular-highcharts and highcharts:
npm install --save angular-highcharts highchartsyarn add angular-highcharts highchartspnpm add angular-highcharts highchartsImport ChartModule in your Angular module:
// app.module.ts
import { ChartModule } from 'angular-highcharts';
@NgModule({
imports: [
ChartModule // Add ChartModule to your imports
]
})
export class AppModule {}// chart.component.ts
import { Component } from '@angular/core';
import { Chart } from 'angular-highcharts';
@Component({
selector: 'app-chart',
template: `
<button (click)="add()">Add Point</button>
<div [chart]="chart"></div>
`
})
export class ChartComponent {
chart = new Chart({
chart: {
type: 'line'
},
title: {
text: 'Line Chart Example'
},
credits: {
enabled: false
},
series: [{
name: 'Line 1',
data: [1, 2, 3],
type: 'line'
}]
});
// Add a point to the chart series
add() {
this.chart.addPoint(Math.floor(Math.random() * 10));
}
}Use the ref$ observable to access the Highcharts chart instance:
import { Component, OnInit } from '@angular/core';
import { Chart } from 'angular-highcharts';
export class ChartComponent implements OnInit {
chart = new Chart({
// ... chart options
});
ngOnInit() {
this.chart.ref$.subscribe(chart => {
// Access the Highcharts.Chart instance
console.log(chart);
// Use Highcharts API methods
chart.setTitle({ text: 'Updated Title' });
});
}
}Standard Highcharts chart for line, bar, pie, and other basic chart types.
Type: class
new Chart(options: Highcharts.Options)Observable that emits the initialized Highcharts.Chart instance. Use this to access the chart API.
See Official Highcharts API Docs
chart.ref$.subscribe(chartInstance => {
// Work with the chart
chartInstance.setTitle({ text: 'New Title' });
});Direct reference to the chart. Deprecated - use ref$ observable instead.
addPoint(point: number | [number, number] | Highcharts.PointOptionsObject, serieIndex?: number, redraw?: boolean, shift?: boolean): void
Adds a point to a series.
Parameters:
point- The point to add (number, tuple, or object)serieIndex- Index of the series (default: 0)redraw- Whether to redraw the chart (default: true)shift- Whether to shift the first point off (default: false)
Example:
this.chart.addPoint(10);
this.chart.addPoint([Date.now(), 25], 0, true, false);Removes a point from a series.
Parameters:
pointIndex- Index of the point to removeserieIndex- Index of the series (default: 0)redraw- Whether to redraw the chart (default: true)shift- Whether to shift (default: false)
Adds a new series to the chart.
Example:
this.chart.addSeries({
name: 'New Series',
data: [1, 2, 3, 4],
type: 'line'
});Removes a series from the chart by index.
Initializes the chart. Called automatically by the directive.
Destroys the chart and cleans up resources.
Highstock chart for financial and time-series data with advanced features like range selectors and navigator.
Type: class
new StockChart(options: Highcharts.Options)Observable that emits the initialized Highstock chart instance.
Direct reference to the chart. Deprecated - use ref$ observable instead.
import { StockChart } from 'angular-highcharts';
stockChart = new StockChart({
rangeSelector: {
selected: 1
},
series: [{
name: 'Stock Price',
data: [[Date.UTC(2023, 0, 1), 100], [Date.UTC(2023, 0, 2), 105]],
type: 'line'
}]
});Highmaps chart for geographical data visualization.
Type: class
new MapChart(options: Highcharts.Options)Observable that emits the initialized Highmaps chart instance.
Direct reference to the chart. Deprecated - use ref$ observable instead.
import { MapChart } from 'angular-highcharts';
import worldMap from '@highcharts/map-collection/custom/world.geo.json';
mapChart = new MapChart({
chart: {
map: worldMap
},
title: {
text: 'World Map'
},
series: [{
type: 'map',
name: 'Countries',
data: [/* map data */]
}]
});Highcharts Gantt chart for project management and scheduling visualization.
Type: class
new HighchartsGantt(options: Highcharts.Options)Observable that emits the initialized Gantt chart instance.
import { HighchartsGantt } from 'angular-highcharts';
ganttChart = new HighchartsGantt({
title: {
text: 'Project Timeline'
},
series: [{
type: 'gantt',
name: 'Tasks',
data: [/* gantt data */]
}]
});Highcharts provides additional modules for extended functionality (exporting, 3D charts, annotations, etc.). To use these modules with angular-highcharts:
- Use ESM imports: Import from
highcharts/esm/for proper tree-shaking and module resolution - Use
.srcsuffix: Import modules with.src.in the path for AOT compatibility - Default imports: Use default imports (recommended) or namespace imports
- Factory pattern: Provide modules using a factory function (required for AOT)
- Location: Most modules are in
highcharts/esm/modules/, excepthighcharts-more.srcwhich is in the root
You can find available modules in your node_modules/highcharts/esm/modules/ directory:
ls -la node_modules/highcharts/esm/modules/Popular modules include:
exporting.src- Chart export functionalityexport-data.src- Export chart data to CSV/Excelaccessibility.src- Accessibility featuresannotations.src- Chart annotationsboost.src- Performance boost for large datasetsdrilldown.src- Drilldown functionalityno-data-to-display.src- Message when no data available
// app.module.ts
import { ChartModule, HIGHCHARTS_MODULES } from 'angular-highcharts';
import more from 'highcharts/esm/highcharts-more.src';
import exporting from 'highcharts/esm/modules/exporting.src';
import exportData from 'highcharts/esm/modules/export-data.src';
import accessibility from 'highcharts/esm/modules/accessibility.src';
@NgModule({
imports: [ChartModule],
providers: [
{
provide: HIGHCHARTS_MODULES,
useFactory: () => [more, exporting, exportData, accessibility]
}
]
})
export class AppModule { }After registering modules, you can use their features in your chart options:
chart = new Chart({
chart: { type: 'line' },
exporting: {
enabled: true, // Enabled by exporting module
buttons: {
contextButton: {
menuItems: ['downloadPNG', 'downloadJPEG', 'downloadPDF']
}
}
},
// ... other options
});If you encounter TypeScript errors when building or serving your Angular app, especially with specialized chart types like gauges or custom options:
// Cast options to any to bypass type checking
chart = new Chart({
// gauge or custom options
} as any);This is particularly useful for:
- Gauge charts
- Custom chart types
- Advanced configurations not fully typed in
@types/highcharts
Problem: Cannot find module 'highcharts/modules/exporting.src'
Solution: Ensure you're using the .src suffix and default imports:
// ✅ Correct - ESM default import (recommended)
import exporting from 'highcharts/esm/modules/exporting.src';
// ✅ Also works - Namespace import (still supported)
import * as exporting from 'highcharts/esm/modules/exporting.src';
// ❌ Wrong - Missing .src suffix
import exporting from 'highcharts/esm/modules/exporting';Note: This library uses ESM imports internally (highcharts/esm/...). Both default and namespace import styles work for module registration.
Common causes:
ChartModulenot imported in your module- Chart container has no height - add CSS:
div { height: 400px; } - Chart initialization happens before the view is ready - use
ngAfterViewInit()orref$observable
Always destroy charts in ngOnDestroy():
ngOnDestroy() {
this.chart.destroy();
}- 🚀 Live Demo
- 💻 Source Code
We welcome contributions! Please see our Contributing Guide for details on:
- Setting up your development environment
- Coding standards and conventions
- Commit message guidelines
- Pull request process
Before submitting a PR, please:
- Check existing issues and PRs
- Follow the commit message format
- Add tests for new features
- Update documentation as needed
MIT © Felix Itzenplitz
Made with ❤️ for the Angular community