https://github.com/vmpowerio/chartjs-node
Create Chart.js Charts Server-side
https://github.com/vmpowerio/chartjs-node
chartjs chartjs-node
Last synced: 5 months ago
JSON representation
Create Chart.js Charts Server-side
- Host: GitHub
- URL: https://github.com/vmpowerio/chartjs-node
- Owner: vmpowerio
- License: mit
- Created: 2016-09-28T14:12:45.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2020-11-24T01:59:05.000Z (about 5 years ago)
- Last Synced: 2025-07-21T04:41:43.579Z (5 months ago)
- Topics: chartjs, chartjs-node
- Language: JavaScript
- Homepage: http://chartjs-demo.vmpower.io
- Size: 196 KB
- Stars: 227
- Watchers: 10
- Forks: 51
- Open Issues: 37
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](http://chartjs-demo.vmpower.io/)
[](https://travis-ci.org/vmpowerio/chartjs-node)
[](https://codeclimate.com/github/vmpowerio/chartjs-node)
# Chartjs-Node
A simple library to make it easy to create Chartjs charts in Node.js (server-side).
This library puts together [jsdom](https://github.com/tmpvar/jsdom), [node-canvas](https://github.com/Automattic/node-canvas) and [chartjs](https://github.com/chartjs/Chart.js) to render Chartjs on the server.
**[Live Demo](http://chartjs-demo.vmpower.io)**
## Getting Started
### Peer Dependencies
You'll need to npm install `chart.js`. This library will pick up the exact version you end up installing.
### Cairo
Before installing this library you'll need to install Cairo for your system. The instructions for the most common platforms can be found [here](https://github.com/Automattic/node-canvas#installation).
Now you're ready to install the package:
```
npm install chartjs-node
```
## Creating a Chart
```js
const ChartjsNode = require('chartjs-node');
// 600x600 canvas size
var chartNode = new ChartjsNode(600, 600);
return chartNode.drawChart(chartJsOptions)
.then(() => {
// chart is created
// get image as png buffer
return chartNode.getImageBuffer('image/png');
})
.then(buffer => {
Array.isArray(buffer) // => true
// as a stream
return chartNode.getImageStream('image/png');
})
.then(streamResult => {
// using the length property you can do things like
// directly upload the image to s3 by using the
// stream and length properties
streamResult.stream // => Stream object
streamResult.length // => Integer length of stream
// write to a file
return chartNode.writeImageToFile('image/png', './testimage.png');
})
.then(() => {
// chart is now written to the file path
// ./testimage.png
});
```
## Destroying the Chart
Each time you create a chart, you will create a new virtual browser `window`. You should call the `destroy`
method to release the native resources or you may leak memory:
```
chartNode.destroy();
```
## Global chart reference
You can access and modify the ChartJS reference before a chart is drawn via an event (`beforeDraw`). ChartjsNode extends [EventEmitter](https://nodejs.org/api/events.html#events_class_eventemitter).
```js
var chartNode = new ChartjsNode(600, 600);
chartNode.on('beforeDraw', function (Chartjs) {
//Chartjs.defaults
//Chartjs.pluginService
//Chartjs.scaleService
//Chartjs.layoutService
//Chartjs.helpers
//Chartjs.controllers
//etc
});
chartNode.drawChart(chartJsOptions) //beforeDraw is called in here
...
```
## Adding draw plugins
To use draw plugins, simply use the ``options`` object to add your plugins, like so:
```js
var myChartOptions = {
plugins: {
afterDraw: function (chart, easing) {
var self = chart.config; /* Configuration object containing type, data, options */
var ctx = chart.chart.ctx; /* Canvas context used to draw with */
...
}
}
}
var chartJsOptions = {
type: 'pie',
data: myChartData,
options: myChartOptions
};
```
[Read here](http://www.chartjs.org/docs/latest/developers/plugins.html) to see what plugins you can write. In the context of drawing static images, ``beforeDraw`` and/or ``afterDraw`` methods makes most sense to implement.
[Read here](https://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D) to see which methods are available for the ``ctx`` object.
## Adding custom charts
To use custom charts, also use the ``options`` object to add your chart config and controller, like so:
```js
var myChartOptions = {
charts: [{
type: 'custom',
baseType: 'bar',
controller: {
draw: function (ease) {},
...
},
defaults: {
...
},
}]
}
var chartJsOptions = {
type: 'custom',
data: myChartData,
options: myChartOptions
};
```
[Read here](http://www.chartjs.org/docs/latest/developers/charts.html) to see how to write custom charts.