Skip to content

Makanz/chartjs-plugin-trendline

Repository files navigation

chartjs-plugin-trendline

This plugin draws linear and exponential trendlines in your Chart. It has been tested with Chart.js version 4.4.9.

See the plugin in action with interactive examples for different chart types.

Installation

Note: Version 3.2.0+ supports ES modules (ESM) for modern bundlers like Vite, SvelteKit, and Next.js. See MIGRATION.md for upgrade details.

Modern Bundlers (Vite, SvelteKit, Next.js, webpack 5+)

Install via npm:

npm i chart.js chartjs-plugin-trendline

Import and register with Chart.js:

import { Chart } from 'chart.js';
import ChartJSTrendline from 'chartjs-plugin-trendline';

Chart.register(ChartJSTrendline);

Node.js (CommonJS)

const { Chart } = require('chart.js');
const ChartJSTrendline = require('chartjs-plugin-trendline');

Chart.register(ChartJSTrendline);

Browser (CDN)

Load Chart.js first, then the plugin which will automatically register itself:

<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.9/dist/chart.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-trendline/dist/chartjs-plugin-trendline.min.js"></script>

The plugin is now available globally as ChartJSTrendline and auto-registers with Chart.js.

Configuration

To configure the trendline plugin you simply add a new config options to your dataset in your chart config.

Linear Trendlines

For linear trendlines (straight lines), use the trendlineLinear configuration:

{
	trendlineLinear: {
		colorMin: Color,
		colorMax: Color,
		lineStyle: string, // "dotted" | "solid" | "dashed" | "dashdot"
		width: number,
		xAxisKey: string, // optional
		yAxisKey: string, // optional
		projection: boolean, // optional
		trendoffset: number, // optional, if > 0 skips first n elements, if < 0 uses last n elements
		// optional
		label: {
			color: Color,
			text: string,
			display: boolean,
			displayValue: boolean, // shows slope value
			offset: number,
			percentage: boolean,
			font: {
				family: string,
				size: number,
			}
		},
		// optional
		legend: {
			text: string,
			strokeStyle: Color,
			fillStyle: Color,
			lineCap: string,
			lineDash: number[],
			lineWidth: number,
		}
	}
}

Exponential Trendlines

For exponential trendlines (curves of the form y = a × e^(b×x)), use the trendlineExponential configuration:

{
	trendlineExponential: {
		colorMin: Color,
		colorMax: Color,
		lineStyle: string, // "dotted" | "solid" | "dashed" | "dashdot"
		width: number,
		xAxisKey: string, // optional
		yAxisKey: string, // optional
		projection: boolean, // optional
		trendoffset: number, // optional, if > 0 skips first n elements, if < 0 uses last n elements
		// optional
		label: {
			color: Color,
			text: string,
			display: boolean,
			displayValue: boolean, // shows exponential parameters (a, b)
			offset: number,
			font: {
				family: string,
				size: number,
			}
		},
		// optional
		legend: {
			text: string,
			strokeStyle: Color,
			fillStyle: Color,
			lineCap: string,
			lineDash: number[],
			lineWidth: number,
		}
	}
}

Note: Exponential trendlines work best with positive y-values. The equation fitted is y = a × e^(b×x), where:

  • a is the coefficient (scaling factor)
  • b is the growth rate (positive for growth, negative for decay)

Examples

Supported chart types

  • bar
  • line
  • scatter

Both linear and exponential trendlines are supported for all chart types.

Contributing

Pull requests and issues are always welcome. For bugs and feature requests, please create an issue.

License

chartjs-plugin-trendline.js is available under the MIT license.

Star History

Star History Chart

About

This plugin draws an linear trendline in your Chart. Made for Chart.js > 4.0

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 26