-// Create the bars
-PlotKit.Layout.prototype._evaluateBarCharts = function() {
- var items = PlotKit.Base.items;
-
- var setCount = items(this.datasets).length;
-
- // work out how far separated values are
- var xdelta = 10000000;
- var xvalues = this._uniqueXValues();
- for (var i = 1; i < xvalues.length; i++) {
- xdelta = Math.min(Math.abs(xvalues[i] - xvalues[i-1]), xdelta);
- }
-
- var barWidth = 0;
- var barWidthForSet = 0;
- var barMargin = 0;
- if (xvalues.length == 1) {
- // note we have to do something smarter if we only plot one value
- xdelta = 1.0;
- this.xscale = 1.0;
- this.minxval = xvalues[0];
- barWidth = 1.0 * this.options.barWidthFillFraction;
- barWidthForSet = barWidth/setCount;
- barMargin = (1.0 - this.options.barWidthFillFraction)/2;
- }
- else {
- // readjust xscale to fix with bar charts
- if (this.xrange == 1) {
- this.xscale = 0.5;
- }
- else if (this.xrange == 2) {
- this.xscale = 1/3.0;
- }
- else {
- this.xscale = (1.0 - xdelta/this.xrange)/this.xrange;
- }
- barWidth = xdelta * this.xscale * this.options.barWidthFillFraction;
- barWidthForSet = barWidth / setCount;
- barMargin = xdelta * this.xscale * (1.0 - this.options.barWidthFillFraction)/2;
- }
-
- this.minxdelta = xdelta; // need this for tick positions
-
- // add all the rects
- this.bars = new Array();
- var i = 0;
- for (var setName in this.datasets) {
- var dataset = this.datasets[setName];
- if (PlotKit.Base.isFuncLike(dataset)) continue;
- for (var j = 0; j < dataset.length; j++) {
- var item = dataset[j];
- var rect = {
- x: ((parseFloat(item[0]) - this.minxval) * this.xscale) + (i * barWidthForSet) + barMargin,
- y: 1.0 - ((parseFloat(item[1]) - this.minyval) * this.yscale),
- w: barWidthForSet,
- h: ((parseFloat(item[1]) - this.minyval) * this.yscale),
- xval: parseFloat(item[0]),
- yval: parseFloat(item[1]),
- name: setName
- };
- if ((rect.x >= 0.0) && (rect.x <= 1.0) &&
- (rect.y >= 0.0) && (rect.y <= 1.0)) {
- this.bars.push(rect);
- }
- }
- i++;
- }
-};
-
-// Create the horizontal bars
-PlotKit.Layout.prototype._evaluateHorizBarCharts = function() {
- var items = PlotKit.Base.items;
-
- var setCount = items(this.datasets).length;
-
- // work out how far separated values are
- var xdelta = 10000000;
- var xvalues = this._uniqueXValues();
- for (var i = 1; i < xvalues.length; i++) {
- xdelta = Math.min(Math.abs(xvalues[i] - xvalues[i-1]), xdelta);
- }
-
- var barWidth = 0;
- var barWidthForSet = 0;
- var barMargin = 0;
-
- // work out how far each far each bar is separated
- if (xvalues.length == 1) {
- // do something smarter if we only plot one value
- xdelta = 1.0;
- this.xscale = 1.0;
- this.minxval = xvalues[0];
- barWidth = 1.0 * this.options.barWidthFillFraction;
- barWidthForSet = barWidth/setCount;
- barMargin = (1.0 - this.options.barWidthFillFraction)/2;
- }
- else {
- // readjust yscale to fix with bar charts
- this.xscale = (1.0 - xdelta/this.xrange)/this.xrange;
- barWidth = xdelta * this.xscale * this.options.barWidthFillFraction;
- barWidthForSet = barWidth / setCount;
- barMargin = xdelta * this.xscale * (1.0 - this.options.barWidthFillFraction)/2;
- }
-
- this.minxdelta = xdelta; // need this for tick positions
-
- // add all the rects
- this.bars = new Array();
- var i = 0;
- for (var setName in this.datasets) {
- var dataset = this.datasets[setName];
- if (PlotKit.Base.isFuncLike(dataset)) continue;
- for (var j = 0; j < dataset.length; j++) {
- var item = dataset[j];
- var rect = {
- y: ((parseFloat(item[0]) - this.minxval) * this.xscale) + (i * barWidthForSet) + barMargin,
- x: 0.0,
- h: barWidthForSet,
- w: ((parseFloat(item[1]) - this.minyval) * this.yscale),
- xval: parseFloat(item[0]),
- yval: parseFloat(item[1]),
- name: setName
- };
-
- // limit the x, y values so they do not overdraw
- if (rect.y <= 0.0) {
- rect.y = 0.0;
- }
- if (rect.y >= 1.0) {
- rect.y = 1.0;
- }
- if ((rect.x >= 0.0) && (rect.x <= 1.0)) {
- this.bars.push(rect);
- }
- }
- i++;
- }
-};
-