]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Allow specifying bar chart via {x, y} data points (#4565)
authorBen McCann <benjamin.j.mccann@gmail.com>
Sat, 29 Jul 2017 19:22:52 +0000 (12:22 -0700)
committerSimon Brunel <simonbrunel@users.noreply.github.com>
Sat, 29 Jul 2017 19:22:52 +0000 (21:22 +0200)
docs/charts/bar.md
src/controllers/controller.bar.js
src/scales/scale.linearbase.js

index 4d5697ec8b03162d9633fc07dd31d5055d66bd77..8dbc1b486025a2f644b4f0d693f8f4c0e34b4040 100644 (file)
@@ -152,6 +152,12 @@ The `data` property of a dataset for a bar chart is specified as a an array of n
 data: [20, 10]
 ```
 
+You can also specify the dataset as x/y coordinates.
+
+```javascript
+data: [{x:'2016-12-25', y:20}, {'2016-12-26', y:10}]
+```
+
 # Stacked Bar Chart
 
 Bar charts can be configured into stacked bar charts by changing the settings on the X and Y axes to enable stacking. Stacked bar charts can be used to show how one data series is made up of a number of smaller pieces.
index 5cc626809ad359e138a4c9e4ab60bbfd3f26c09c..dfbe6a44881416c803932a9886d9ef333c37bc09 100644 (file)
@@ -268,7 +268,7 @@ module.exports = function(Chart) {
                        var meta = me.getMeta();
                        var scale = me.getValueScale();
                        var datasets = chart.data.datasets;
-                       var value = Number(datasets[datasetIndex].data[index]);
+                       var value = scale.getRightValue(datasets[datasetIndex].data[index]);
                        var stacked = scale.options.stacked;
                        var stack = meta.stack;
                        var start = 0;
@@ -283,7 +283,7 @@ module.exports = function(Chart) {
                                                imeta.controller.getValueScaleId() === scale.id &&
                                                chart.isDatasetVisible(i)) {
 
-                                               ivalue = Number(datasets[i].data[index]);
+                                               ivalue = scale.getRightValue(datasets[i].data[index]);
                                                if ((value < 0 && ivalue < 0) || (value >= 0 && ivalue > 0)) {
                                                        start += ivalue;
                                                }
@@ -330,17 +330,16 @@ module.exports = function(Chart) {
                draw: function() {
                        var me = this;
                        var chart = me.chart;
+                       var scale = me.getIndexScale();
                        var rects = me.getMeta().data;
                        var dataset = me.getDataset();
                        var ilen = rects.length;
                        var i = 0;
-                       var d;
 
                        helpers.canvas.clipArea(chart.ctx, chart.chartArea);
 
                        for (; i < ilen; ++i) {
-                               d = dataset.data[i];
-                               if (d !== null && d !== undefined && !isNaN(d)) {
+                               if (!isNaN(scale.getRightValue(dataset.data[i]))) {
                                        rects[i].draw();
                                }
                        }
index cf75b31663d9572ccefd7b6ed2ae19b78c4d3063..0d9a33bf2a39ba4aea73fe8b20c67b79a4895cd3 100644 (file)
@@ -8,6 +8,13 @@ module.exports = function(Chart) {
        var noop = helpers.noop;
 
        Chart.LinearScaleBase = Chart.Scale.extend({
+               getRightValue: function(value) {
+                       if (typeof value === 'string') {
+                               return +value;
+                       }
+                       return Chart.Scale.prototype.getRightValue.call(this, value);
+               },
+
                handleTickRangeOptions: function() {
                        var me = this;
                        var opts = me.options;