From: Ben McCann Date: Sat, 29 Jul 2017 19:22:52 +0000 (-0700) Subject: Allow specifying bar chart via {x, y} data points (#4565) X-Git-Tag: v2.7.0~1^2~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=56fdd7ebc10c91834361a6228f2ebdb09530d690;p=thirdparty%2FChart.js.git Allow specifying bar chart via {x, y} data points (#4565) --- diff --git a/docs/charts/bar.md b/docs/charts/bar.md index 4d5697ec8..8dbc1b486 100644 --- a/docs/charts/bar.md +++ b/docs/charts/bar.md @@ -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. diff --git a/src/controllers/controller.bar.js b/src/controllers/controller.bar.js index 5cc626809..dfbe6a448 100644 --- a/src/controllers/controller.bar.js +++ b/src/controllers/controller.bar.js @@ -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(); } } diff --git a/src/scales/scale.linearbase.js b/src/scales/scale.linearbase.js index cf75b3166..0d9a33bf2 100644 --- a/src/scales/scale.linearbase.js +++ b/src/scales/scale.linearbase.js @@ -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;