• Stars
    star
    2,673
  • Rank 17,101 (Top 0.4 %)
  • Language
    JavaScript
  • License
    Other
  • Created over 10 years ago
  • Updated about 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Reactive, responsive, beautiful charts for AngularJS using Chart.js: http://jtblin.github.io/angular-chart.js

angular-chart.js

Bower version npm version Build Status Codacy Badge Code Coverage npm

Beautiful, reactive, responsive charts for Angular.JS using Chart.js.

Have a look at the demo site to see examples with detailed markup, script and options.

Installation

This is the 1.x branch which requires Chart.js 2.x version. Following semantic versioning, there are numerous breaking changes since 0.x, notably:

  • all options now need to use the chart- prefix
  • chart-colours is now chart-colors and chart-get-colour is now chart-get-color
  • chart types are in camelCase e.g. line and polarArea
  • legend is now a Chart.js option so the chart-legend attribute has been removed
  • events emitted on creation and update are now prefixed with chart- e.g. chart-create
  • $scope.$apply is not called anymore on mouse hover functions calls
  • obviously all Chart.js breaking changes as well in how options are set, etc.
  • disabling the responsive option doesn't work via global Chart.defaults.global.responsive anymore, but must be set via standard options e.g. ChartJsProvider.setOptions({ responsive: false });
  • factory now returns a module name instead of a module instance

npm

npm install --save angular-chart.js

cdn

//cdn.jsdelivr.net/angular.chartjs/latest/angular-chart.min.js

bower

bower install --save angular-chart.js

manually

or copy the files from dist/.

Then add the sources to your code (adjust paths as needed) after adding the dependencies for Angular and Chart.js first:

<head>
  ...
<head>
<body>
  ...
</body>
  <script src="node_modules/angular/angular.min.js"></script>
  <script src="node_modules/chart.js/dist/Chart.min.js"></script>
  <script src="node_modules/angular-chart.js/dist/angular-chart.min.js"></script>

Utilisation

There are 8 types of charts so 8 directives: chart-line, chart-bar, chart-horizontal-bar, chart-radar, chart-pie, chart-polar-area, chart-doughnut, chart-bubble.

Here are the options for all directives:

  • chart-data: series data
  • chart-labels: x axis labels (line, bar, horizontal bar, radar, bubble) or series labels (pie, doughnut, polar area)
  • chart-options: chart options (as from Chart.js documentation)
  • chart-series: (default: []): series labels (line, bar, radar)
  • chart-colors: data colors (will use default colors if not specified)
  • chart-get-color: function that returns a color in case there are not enough (will use random colors if not specified)
  • chart-click: onclick event handler
  • chart-hover: onmousemove event handler
  • chart-dataset-override: override individual datasets to allow per dataset configuration e.g. y-axis, mixed type chart

There is another directive chart-base that takes an extra attribute chart-type to define the type dynamically.

You can create mixed type chart using the chart-dataset-override, see bar-line example.

See also stacked bar example.

Example

Markup

<canvas class="chart chart-line" chart-data="data" chart-labels="labels" 
	chart-series="series" chart-click="onClick"></canvas> 

Javascript

angular.module("app", ["chart.js"])
  // Optional configuration
  .config(['ChartJsProvider', function (ChartJsProvider) {
    // Configure all charts
    ChartJsProvider.setOptions({
      chartColors: ['#FF5252', '#FF8A80'],
      responsive: false
    });
    // Configure all line charts
    ChartJsProvider.setOptions('line', {
      showLines: false
    });
  }])
  .controller("LineCtrl", ['$scope', '$timeout', function ($scope, $timeout) {

  $scope.labels = ["January", "February", "March", "April", "May", "June", "July"];
  $scope.series = ['Series A', 'Series B'];
  $scope.data = [
    [65, 59, 80, 81, 56, 55, 40],
    [28, 48, 40, 19, 86, 27, 90]
  ];
  $scope.onClick = function (points, evt) {
    console.log(points, evt);
  };
  
  // Simulate async data update
  $timeout(function () {
    $scope.data = [
      [28, 48, 40, 19, 86, 27, 90],
      [65, 59, 80, 81, 56, 55, 40]
    ];
  }, 3000);
}]);

AMD RequireJS

See a simple AMD example

CommonJS e.g. webpack

Module should work with CommonJS out of the box e.g. browserify or webpack, see a webpack example.

Reactive

angular-chart.js watch updates on data, series, labels, colors and options and will update, or destroy and recreate, the chart on changes.

Events

angular-chart.js listens to the following events on the scope and acts accordingly:

  • $destroy: call .destroy() on the chart
  • $resize: call .resize() on the chart

angular-chart.js emits the following events on the scope and pass the chart as argument:

  • chart-create: when chart is created
  • chart-update: when chart is updated
  • chart-destroy: when chart is destroyed
$scope.$on('chart-create', function (evt, chart) {
  console.log(chart);
});

Note: the event can be emitted multiple times for each chart as the chart can be destroyed and created multiple times during angular watch lifecycle.

angular-chart.js listens to the scope $destroy event and destroys the chart when it happens.

Colors

There are a set of 7 default colors. Colors can be replaced using the colors attribute. If there is more data than colors, colors are generated randomly or can be provided via a function through the getColor attribute.

Hex colors are converted to Chart.js colors automatically, including different shades for highlight, fill, stroke, etc.

RGB colors may be input by using a string in the format "rgb(r,g,b)".

Example - RGB Colors

angular.module('app',['chart.js'])
        .controller('MainController', function($scope){ 
          $scope.colors = ["rgb(159,204,0)","rgb(250,109,33)","rgb(154,154,154)"];
          $scope.labels = ["Green", "Orange", "Grey"];
          $scope.data = [300, 500, 100];
        });

RGBA colors may also be input by using a string in the format "rgba(r,g,b,a)". They may be used alongside RGB colors and/or Hex colors.

Example - RGBA Colors

angular.module('app',['chart.js'])
        .controller('MainController', function($scope){ 
          $scope.colors = ["rgba(159,204,0,0.5)","rgba(250,109,33,0.7)","rgba(154,154,154,0.5)"];
          $scope.labels = ["Green", "Orange", "Grey"];
          $scope.data = [300, 500, 100];
        });

Colors may also be input as an object by using the format in the example below. Colors input as objects, Hex colors, RGB, and RGBA colors may be mixed and matched.

Example - input color as an object

angular.module('app',['chart.js'])
        .controller('MainController', function($scope){ 
          $scope.colors = [
            {
              backgroundColor: "rgba(159,204,0, 0.2)",
              pointBackgroundColor: "rgba(159,204,0, 1)",
              pointHoverBackgroundColor: "rgba(159,204,0, 0.8)",
              borderColor: "rgba(159,204,0, 1)",
              pointBorderColor: '#fff',
              pointHoverBorderColor: "rgba(159,204,0, 1)"
            },"rgba(250,109,33,0.5)","#9a9a9a","rgb(233,177,69)"
          ];
          $scope.labels = ["Green", "Peach", "Grey", "Orange"];
          $scope.data = [300, 500, 100, 150];
        });

Browser compatibility

For IE8 and older browsers, you will need to include excanvas. You will also need a shim for ES5 functions.

You also need to have height and width attributes for the <canvas> tag of your chart if using IE8 and older browsers. If you do not have these attributes, you will need a getComputedStyle shim and the line document.defaultView = window;, but there still may be errors (due to code in Chart.js).

<head>
<!--[if lt IE 9]>
  <script src="excanvas.js"></script>
  <script src="es5-shim.js"></script>
<![endif]-->
</head>

Issues

Issues or feature requests for Chart.js (e.g. new chart type, new axis, etc.) need to be opened on Chart.js issues tracker

For general questions about usage, please use http://stackoverflow.com/

Please check if issue exists first, otherwise open issue in github. Ensure you add a link to a plunker, jsbin, or equivalent.

Here is a jsbin template for convenience.

v0.x - Chart.js v1.x - deprecated

This is the deprecated version of angular-chart.js that uses the v1.x version of Chart.js. If you want to use this version, please checkout the chartjs-1.x branch

Contributing

Pull requests welcome!

See CONTRIBUTING.md.

Contributors

Thank you to the contributors!

Author

Jerome Touffe-Blin, @jtblin, About me

License

angular-chart.js is copyright 2016 Jerome Touffe-Blin and contributors. It is licensed under the BSD license. See the include LICENSE file for details.

More Repositories

1

kube2iam

kube2iam provides different AWS IAM roles for pods running on Kubernetes
Go
1,987
star
2

go-ldap-client

Simple ldap client to authenticate, retrieve basic information and groups for a user.
Go
261
star
3

aws-mock-metadata

Mock ec2 instance metadata service that can run on a developer machine
Go
93
star
4

syncho

Fast and lean abstraction for node Fibers. Easily run asynchronous functions synchronously.
JavaScript
21
star
5

mocha-osx-reporter

A Mocha reporter. Report results with OSX Notification Center.
JavaScript
12
star
6

go-acme

Add Let's Encrypt (ACME) support to generate and renew SSL certificates to go servers using the DNS provider challenge.
Go
11
star
7

crypto-md5

Generates an md5 hash using node crypto module
JavaScript
8
star
8

kube2vulcand

kube2vulcand provides a a bridge between Kubernetes and vulcand
Go
7
star
9

master-cluster

A module to facilitate using node cluster module.
JavaScript
6
star
10

nginx-k8s

nginx reverse proxy for kubernetes which automagically serves all services based on their domain name.
Nginx
5
star
11

node-active-model

Active Model for node.js
JavaScript
5
star
12

coreos-vagrant-kubernetes

Minimal single node kubernetes cluster Vagrantfile for CoreOS. Easiest way to start with kubernetes locally.
Ruby
4
star
13

docker-gc

Simple docker garbage collection
Shell
4
star
14

html_mini

Simple, fast HTML minification for Rack applications
Ruby
3
star
15

alamo

High level full streaming API s3 client with multipart concurrent uploads, and automatic retries with exponential backoff
JavaScript
3
star
16

stream-ext

Simple extensions for node.js streams.
JavaScript
2
star
17

node-sync-redis-store

A synchronous Fibers-powered redis store for SyncCache module
JavaScript
2
star
18

go-logger

A logger interface for Go
Go
2
star
19

debian-node-graphicsmagick

Docker image based off debian:stretch with node and GraphicsMagick installed.
2
star
20

testatic

Setup a simple static site
JavaScript
1
star
21

sync-cache

NodeJS cache for synchronous modules e.g. using Fibers based on Isaac's AsyncCache
JavaScript
1
star
22

marker

A markdown wiki
JavaScript
1
star
23

ip2location

Simple client for the IP2Location API
Ruby
1
star
24

node-renderer

Simple nodejs server to render Underscore templates.
JavaScript
1
star
25

http_mini

A truly minimalist Http client for Ruby
Ruby
1
star
26

docker-auth

Docker auth token server: https://docs.docker.com/registry/spec/auth/token/
Go
1
star